如何解决"dimension mismatch"?
How to solve "dimension mismatch"?
我在 运行 我的程序时收到此消息:
Error in metallror (line 23)
A(end,end-1)=(2.*r); % 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
根据您尝试做的似乎,您想要向矩阵添加一些边框。这样做是正确的:
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;
而且,如果你允许我开个玩笑:你一定来自 Lisp 世界,我已经有一段时间没有看到这么多被滥用的括号了。 :-)
我在 运行 我的程序时收到此消息:
Error in metallror (line 23) A(end,end-1)=(2.*r); % 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
根据您尝试做的似乎,您想要向矩阵添加一些边框。这样做是正确的:
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;
而且,如果你允许我开个玩笑:你一定来自 Lisp 世界,我已经有一段时间没有看到这么多被滥用的括号了。 :-)