关于Mathematica的程序问题,谁能告诉我这个程序为什么跑不出结果?如果能告知正确的就更感激了~

Clear[i]n=10;g[x_]=Exp[x];f[x_,y_]=y*D[y,{x,2}];y0[x_]=1+x;For[i=1,i<=n,i++,y01[x_]=y... Clear[i]
n = 10;
g[x_] = Exp[x];
f[x_, y_] = y*D[y, {x, 2}];
y0[x_] = 1 + x;
For[i = 1, i <= n, i++, y01[x_] = y0[x]^2;
yj[x_] =
y0[x] - Integrate[(Integrate[(f[t, y0[t]] - y01[t]), {t, 0,
u}]), {u, 0, x}];
y0[x_] = yj[x];]
qq = Table[0, {i, 1, 10}, {j, 1, 5}];
For[i = 1, i <= 10, i++, qq[[i, 1]] = 0.1*i;
qq[[i, 2]] = g[0.1*i];
qq[[i, 3]] = yj[0.1*i];
qq[[i, 4]] = Abs[yj[0.1*i] - g[0.1*i]];
qq[[i, 5]] = Abs[yj[0.1*i] - g[0.1*i]]/g[0.1*i]];
TableForm[qq]
展开
 我来答
pencilpine
2012-11-16 · TA获得超过661个赞
知道小有建树答主
回答量:381
采纳率:0%
帮助的人:460万
展开全部
先把n=10改成n=3,其余不变,几乎马上就出来了结果;
然后改成n=5,用时6.85秒;
再试了下n=8,用时118秒;
最后试了下n=10,这次等了半天都没出结果.
综上,你的语法应该是没有问题的,主要的问题我觉得可能是
yj[x_] =y0[x] - Integrate[(Integrate[(f[t, y0[t]] - y01[t]), {t, 0,u}]), {u, 0, x}];
这一句上面,你实际是想用函数迭代的方法求得一组函数序列,中间用的是符号积分,这个是相当费时间的,与表达式的复杂度成指数上升.
这个我也没有更好的办法去改进,要优化的话只能从数学上和算法上来研究了,我现在没有太多时间去仔细看.
现在唯一的办法就是等待吧,比如挂一晚上机,希望第二天一早应该会出来你想要的结果的...
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机汇编程序是用汇编语言编写的程序,用于控制单片机的操作。汇编语言是一种比较接近计算机硬件语言的低级语言,相对于高级语言来说更容易理解和实现。下面是单片机汇编程序的基本步骤:1. 将代码和数据汇编到规定的段中。2. 在存储器中用未初始化的... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
xzcyr
2012-11-14 · TA获得超过3407个赞
知道大有可为答主
回答量:1401
采纳率:100%
帮助的人:716万
展开全部
同学你还没放弃For循环啊……如果你的f函数的目的并非产生一个0的话,那就把你的函数定义改成延迟赋值:
f[x_, y_] := y*D[y, {x, 2}];

至于理由嘛,你把你原来的函数定义后面的分号去掉进行一下就知道了。

老实说,同学你这习惯很不好,代码正确与否都还不知道就满世界的用分号,结果出了错都判不出错了哪里,还有啊求你了把For循环去掉吧……对于循环内部的错误,可以添加Print代码去监视——这样你将看到这个积分运算有多复杂。因为不知道你的意图是什么所以我也没法给出更多建议了。 总之这个计算是很费时的,在我打这些废话的这段时间里,第一个循环才算到8……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式