2015-12-03 3 views
0

я получаю это сообщение при запуске моей программы:Как решить «несоответствие размеров»?

Ошибка в metallror (строка 23) A (конец, конец-1) = (2. * г); % byter ut den första elementen innan - (1/(2 * h))

Это что-то не так с моей A-матрицей?

Программа:

clc,clf,clear all 

%Givet 
Ti=450; r0=1;R=2;K=1;Te=20; 
x=[1 2 4 8 ]; %används för att fördubbla våra intervall 
g=0;    %fortsätt läs koden! 
% N=4;    %Antal intervall 
% n=N; 
for i=1:4 
    N=25*x(i);  %fördubblar delintervallena 
    h=(R-r0)/N;  %steglängd 
    r=r0+h:h:R;   %Inre punkter plus sista obekanta 

    sub=(2*r-h)'; %'sub diagonal 
    dia=(-4.*r)';  %'huvuddiagonal 
    sup=(2*r+h)'; %'super diagonal 


%vänsterled------ 
    A=spdiags([sub dia sup],-1:1,N,N); % bildar en gles matris 
    size(A) 
    A(end,end-1)=(2.*r);  % byter ut den första elementen innan -(1/(2*h)) 
            % med vårt handberäknade värde 
    A(end,end)=((-2.*r)-(2.*r.*h.*K)-((h.^2).*K)); % byter ut den sista elementen innan K 

%högerled 
    B=zeros(N,1);    % högerled 
    B(1,1)=-Ti*((2*r0)-h); % byter ut elementen med 
             % vårt handberäknade värde 
    B(end,1)=((-2*h*K*r)*Te-((h.^2)*K)*Te);  % byter ut elementen innan KTe 

%Beräknar 
    U=A\B 
    u=[Ti U']; %' 

%visar resultatet 
disp(['temperaturen vid r=2 med ',num2str(N),' delintervall är: ',num2str(u(end))]) 


%Ritar vår graf 
    g=g+1;     %används för att rita olika diagram 
    subplot(2,2,g) 
    size(r) 
    size(u) 
    plot([1 r],u),grid on  %[1 r],u) 
    xlabel('Radie') 
    ylabel('Temperatur') 
    title(['Diagram med ',num2str(N),' delintervall' ]) 
end 
+2

Пожалуйста, сделайте хотя бы попытку предоставить комментарии на английском языке. Добро пожаловать в Stackoverlflow, хотя :) – JaBe

+4

Вы назначаете массив ('r') единичной матричной записи в' A'. Это, конечно, не подойдет. Это похоже на попытку припарковать все ваши 20 автомобилей в одном гаражном ящике. И, как сказал Джаб, не все здесь говорят на шведском языке, а SO - английский веб-сайт. Для вас было бы полезно дать комментарии по английскому языку, так как каждый (и не только я и те немногие, кто говорит по-шведски) могут понять ваш код. – Adriaan

ответ

0

Взгляды что кажется вы пытаетесь сделать, вы хотите, чтобы добавить некоторые границы для ваших матриц. Это правильно сделать так:

A(:,end-1) = 2*r; 
A(:,end) = - 2*r - 2*h*K*r - h*h*K; 
%// some more code 
B(:,1) =   (- 2*h*K*r - h*h*K)*Te; 

И, если вы позволите мне пошутить: вы должны исходить из Лиспа, это давненько, так как я видел так много подвергнувшихся насилию круглых скобок. :-)

Смежные вопросы