-
你的程式執行不佳,我自己寫了乙個。
首先,請將以下**複製到 m 檔案中並儲存為:
function dx=dxdt(t,x)dx(1)=;
dx(2)=;
dx(3)=;
dx=dx(:)
然後在另乙個 m 檔案或命令視窗中輸入以下命令並執行:
clear;
clc;t=[0,200];
x0=[999999;1;0];
t,x]=ode45('dxdt',t,x0);
plot(t,x(:,1),'r',t,x(:,2),'g',t,x(:,3),'b');
xlabel('t');ylabel('x');軸解釋了自己。
title('myhelp');標題解釋了自己。
legend('x1','x2','x3'%** 可以自行新增。
結果圖我就不貼了,省級的會拉過來再審核。
如果你不明白,你可以問,如果你認為可以,就給乙個。
-
系統出了點問題,我不是幫你解決了這個問題嗎? 為什麼你一直提醒我,我收到了你的求助請求?
樓上用的那個是我的答案,甚至沒有標明報價!
原始參考位址。
-
為什麼題主給出的這個matlab程式的執行結果是一條直線? 錯了嗎? 由於受試者給出了洛倫茲模型的狀態方程,我們知道該方程完全取決於時間tspan條件,即tspan=0 t,當t較小時,會出現一條直線,但隨著t的增加,其圖將出現在受試者給出的相空間圖中(蝴蝶圖)。
分析題主的**,主要錯誤有:
1.t值較小,建議取t=100以上
[t,x] =rk4@(t,x)func(t,x),x0,h,a,b)
這裡,func 是自定義微分方程函式,x0 是初始條件,a 是初始時間,b 是結束時間,h 是步長
x0=[1,2,3]
a=0
b=100
h=
-
多個問題:
1.linspace函式的第三個引數不是步長,而是資料點的數量。
2.繪製曲面圖,需要生成網格資料,並且需要使用網格網格;
3.計算z的最後乙個除法符號應該是點除法(
x=linspace(0,,20);
y=linspace(0,2,20);
x,y]=meshgrid(x,y);
z=20/3*pi*cos(20/3*pi*x)-10/3*sin(20/3*x)./sqrt(y.^2-cos(20/3*x));
但這樣做仍然存在乙個問題:計算出的z是乙個複數,應該是x或y的取值範圍不合適。
-
錯誤1:迴圈錯誤,兩個只為一端
錯誤 2:將 hold on 替換為 hold on
錯誤 3:計算 y(yy,zz)=y; ,y的分量應迴圈變化,修改如下:
p=;v=;u=;g=;r=;n=10;
b=p.*(1-r)./1-(1-p).*1-r));
yy=1;for q=;
zz=1;for v=;
c=p.*(1-q).*1-u)./1-p).*q+(1-p).*1-q).*u);
f=p.*(1-q)./1-p).*q+(1-p).*1-q).*u);
a=1./(2.*(1-p).
1-q).*v+(1-p).*q).
g./(1-g)+(1-p).*q+(1-p).
1-q).*v+p.*(1-q).
1-v)-sqrt((g./(1-g)+(1-p).*q+(1-p).
1-q).*v+p.*(1-q).
1-v)).2-4.*(1-p).
1-q).*v+(1-p).*q).
p.*(1-q).*1-v)))
e=a.*g./(1-g).*1-(1-p).*1-r)))
d=((1-q).*u+q).*f+r).*e./(q+(1-q).*u).*1-a));
h2=(d.*(b-a)-e.*f)./1-c).*1-a).*b-a));
h3=e.*f.*b./(a.*(1-b).*1-c).*b-a));
h=1./(1-a).*c-b)).
e.*f+d.*(c-b)).
1-c)-e.*f./(1-b))+e.
f./(a.*(1-b).
1-c))+d+g./(1-g).*1-p).
q+(1-p).*1-q).*u)).
1-c.^n)./1-c).
2;y=c./(1-c)+h2./(h.*(1-a))+h3./(h.*(1-b));
y(yy,zz)=y;
zz=zz+1;% 將 zz 變化放入內迴圈中。
end% 內部迴圈結束。
yy=yy+1;
endq=;
v=;[m,n]=meshgrid(q,v);
hold on
grid on
mesh(m,n,y);