Как устранить несоответствие размеров?

Я получаю это сообщение при запуске моей программы:

Ошибка в металлорежиме (строка 23) A(end,end-1)=(2.*r); % байтов по отношению к количеству элементов - (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

person elvirab    schedule 03.12.2015    source источник
comment
Пожалуйста, приложите хотя бы усилия, чтобы предоставить комментарии на английском языке. Добро пожаловать в Stackoverlflow, хотя :)   -  person JaBe    schedule 03.12.2015
comment
Вы назначаете массив (r) одной записи матрицы в A. Это не подойдет, конечно. Это как пытаться припарковать все свои 20 машин в одном гараже. И, как сказал JaBe, не все здесь говорят по-шведски, а SO — англоязычный сайт. Комментарий на английском языке принесет пользу вашему делу, поскольку тогда каждый (а не только я и те немногие, кто говорит по-шведски) сможет понять ваш код.   -  person Adriaan    schedule 03.12.2015


Ответы (1)


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

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;

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

person Community    schedule 03.12.2015