[已解决] 该程序怎么编写?为何我的结果是错的。

[复制链接]
wangeg 发表于 2022-6-19 21:14:28
function dy = eq2(t,y)
dy = zeros(2,1);
dy(1) = 5*(1-y(1))/sqrt((1-y(1))^2 + (t-y(2))^2);
dy(2) = 5*(t-y(2))/sqrt((1-y(1))^2 + (t-y(2))^2);
t0 = 0;tf = 0.21;
X = 1;Y = 0:0.001:0.21;
x = 0:0.01:1;y = -5*(1-x).^(4/5)/8+5*(1-x).^(6/5)/12+5/24;
[t,y] = ode45('eg2',[t0 tf],[00]);
plot(y(:,1),y(:,2),'*'),hold on
plot(x,y,'r')
plot(X,Y,'-')

未定义函数或变量 't0'。
我按照书上的写代码,可为何是错的?有哪位高人能指导一下,这该怎么写?


QQ图片20220619210400.jpg
QQ图片20220619205310.jpg
QQ图片20220619200608.jpg

最佳答案


lyqmath 发表于 2022-6-20 10:30:01



这种一般是用函数文件名或函数句柄的方式来调用
更多的可参考
《视觉大数据智能分析算法实战》[刘衍琦等]

  1. clc; clear all; close all
  2. t0 = 0;tf = 0.21;
  3. X = 1;Y = 0:0.001:0.21;
  4. x = 0:0.01:1;
  5. yt = -5*(1-x).^(4/5)/8+5*(1-x).^(6/5)/12+5/24;
  6. [t,y] = ode45(@eg2,[t0 tf],[0 0]);
  7. plot(y(:,1),y(:,2),'*'),hold on
  8. plot(x,yt,'r')

  9. function dy = eg2(t,y)
  10. dy = zeros(2,1);
  11. dy(1) = 5*(1-y(1))/sqrt((1-y(1))^2 + (t-y(2))^2);
  12. dy(2) = 5*(t-y(2))/sqrt((1-y(1))^2 + (t-y(2))^2);
  13. end
复制代码
[attach]331978[/attach]

2 条回复


TouAkira 发表于 2022-6-20 03:45:28
书上写得很清楚,你再仔细看看“(2)求解微分方程的数值解”的位置,还能说“按照书上的写代码”吗?
“举头望明月,低头思故乡”被你搞成“举头望明月低头,思故乡”,你觉得意思还对吗?

lyqmath 发表于 2022-6-20 10:30:01



这种一般是用函数文件名或函数句柄的方式来调用
更多的可参考
《视觉大数据智能分析算法实战》[刘衍琦等]

  1. clc; clear all; close all
  2. t0 = 0;tf = 0.21;
  3. X = 1;Y = 0:0.001:0.21;
  4. x = 0:0.01:1;
  5. yt = -5*(1-x).^(4/5)/8+5*(1-x).^(6/5)/12+5/24;
  6. [t,y] = ode45(@eg2,[t0 tf],[0 0]);
  7. plot(y(:,1),y(:,2),'*'),hold on
  8. plot(x,yt,'r')

  9. function dy = eg2(t,y)
  10. dy = zeros(2,1);
  11. dy(1) = 5*(1-y(1))/sqrt((1-y(1))^2 + (t-y(2))^2);
  12. dy(2) = 5*(t-y(2))/sqrt((1-y(1))^2 + (t-y(2))^2);
  13. end
复制代码
result.png
回复此楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表