声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1215|回复: 9

[综合讨论] 求解微分方程后为何画不出求解结果

[复制链接]
发表于 2008-5-7 09:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
function chapter7()
clc
clear all
close all
global tc w
tc=0.1;w=6.28;
final_time=1;
a=[0,final_time];
y0=0;
[t,y]= ode45(@eq4,a,y0);
plot(t,y) % 本想 plot (t,y,t,F,':')
%% plot (t,y,t,F,':') % 这个地方就出错了,为什么找不到求解方程的F值那?可是
%% 运行时去掉F表达式后面的分号,在command窗口有F的求解结果,怎么就画不出来哪?
%% 希望明白人给个明白的解释,谢谢
xlabel('t'),ylabel('y(t)')
axis tight
end

function ydot=eq4(t,y)
        global tc w
        F=t*exp(-t/tc)*cos(w*t);
        ydot=5*(F-y);
end

[ 本帖最后由 eight 于 2008-5-7 11:31 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-5-7 10:19 | 显示全部楼层


虽然command窗口有F的求解结果,但是Workspace里面没有F,所以才会报错!
之所以会这样,我想应该是函数体可以调用主程序的全局变量,但是主程序不可以调用函数体的中间变量的缘故吧!

代码应改为这样:

function chapter7()
clc
clear all
close all
global tc w
tc=0.1;w=6.28;
final_time=1;
a=[0,final_time];
y0=0;
[t,y]= ode45(@eq4,a,y0);
F=t.*exp(-t/tc).*cos(w*t);
plot (t,y,t,F,':')
xlabel('t'),ylabel('y(t)')
axis tight
end

[ 本帖最后由 ch_j1985 于 2008-5-7 10:29 编辑 ]
 楼主| 发表于 2008-5-7 10:36 | 显示全部楼层
首先谢谢你的解答,我现在已经改过来了。但是还有一个问题需要您继续回答
请问,F的表达式实际上在方程(eq4)里面已经出现过了
而且方程也能求出F的每一个数值
为什么就不能提取
如果F表达式很复杂,重新编排,整理(我是说变成矩阵运算)岂不是相当麻烦,
还有没有不用再输入一次表达式的方法呢?
谢谢您的关注

[ 本帖最后由 eight 于 2008-5-7 10:55 编辑 ]
发表于 2008-5-7 10:44 | 显示全部楼层
把F也定义成全局变量行不行啊?
 楼主| 发表于 2008-5-7 10:48 | 显示全部楼层
no
It has some errors
please, try it and explain it
发表于 2008-5-7 11:00 | 显示全部楼层
这样写好像可以,呵呵

function chapter7()
clc
clear all
close all
global tc w
tc=0.1;w=6.28;
final_time=1;
a=[0,final_time];
y0=0;
[t,y]= ode45(@eq4,a,y0);
[F,a]=eq4(t,y);
% plot(t,y) %

plot (t,y,t,F,':')
%% plot (t,y,t,F,':') % 这个地方就出错了,为什么找不到求解方程的F值那?可是
%% 运行时去掉F表达式后面的分号,在command窗口有F的求解结果,怎么就画不出来哪?
%% 希望明白人给个明白的解释,谢谢
xlabel('t'),ylabel('y(t)')
axis tight
end

function [F,ydot]=eq4(t,y)
        global tc w
        F=t.*exp(-t/tc).*cos(w*t);
        ydot=5*(F-y);
end
发表于 2008-5-7 11:30 | 显示全部楼层
原帖由 wwbeyondww 于 2008-5-7 11:00 发表
这样写好像可以,呵呵

function chapter7()
clc
clear all
close all
global tc w
tc=0.1;w=6.28;
final_time=1;
a=[0,final_time];
y0=0;
[t,y]= ode45(@eq4,a,y0);
[F,a]=eq4(t,y);
% plot(t,y) %
...
有出错提示吗?没有的话,自己调试一下吧
 楼主| 发表于 2008-5-7 15:30 | 显示全部楼层
很多错误提示
我都不知道怎么改了,
学识不深,请直言
发表于 2008-5-7 16:40 | 显示全部楼层
原帖由 semeng 于 2008-5-7 15:30 发表
很多错误提示
我都不知道怎么改了,
学识不深,请直言


按照5楼的代码,编程画出的图如下(不知是不是你想要的):
2.bmp
发表于 2008-5-7 16:45 | 显示全部楼层

回复 8楼 的帖子

又没改啥,只是多加了个函数返回的参数而已啊
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-23 11:15 , Processed in 0.056942 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表