找回密码
 注册
Simdroid-非首页
查看: 248|回复: 3

[数值计算] 一道简单的数值微分编程

[复制链接]
发表于 2010-3-26 14:47:59 | 显示全部楼层 |阅读模式 来自 甘肃兰州
y是x的函数y[x],dy/dx=-xy,y[0]=1,要求用数值方法求y[x0],当然x0是赋值。即为计算y[1],y[2],这些。
递推公式是y[x+h]=y[x]+h dy/dx。h是步长。
我一直觉得好像很简单但又总没写出来,大概是进了思维的死角吧,……麻烦谁来提示一下,谢谢了。

相关帖子

 楼主| 发表于 2010-3-26 22:25:40 | 显示全部楼层 来自 甘肃兰州
Simdroid开发平台
本帖最后由 jimogsh 于 2010-3-26 22:29 编辑

用哪种算法对于这个代码的结构是没有太大影响的,我就是想看看要怎么写这个程序
我希望是这样的一个形式:
  1. y[x0_,h_]:=Module[{f},...]
复制代码
直接输入x0和h值就给出y[x0]的值,而不是散点的列表。
我现在上的计算物理课,老师让学fortran,于是我想把那些算法也用mathematica表达一下,没想到第一道题就卡住了,这些语言之间差距还是比较大的。
回复 不支持

使用道具 举报

发表于 2010-3-27 13:01:58 | 显示全部楼层 来自 北京
由于时间关系,我没有验证,思路没有问题的.
  1. In[6]:= y[x0_, h_] :=
  2. Module[{f, xielv, n},
  3.   xielv[x_, y_] := -x*y;
  4.   f[0] = 1;
  5.   f[n_] := f[n - 1] + h *(-f[n - 1]*(x0 + (n - 1) h));
  6.   n = Quotient[x0, h];
  7.   f[n] + (x0 - n*h)*(-f[n - 1]*(x0 + (n - 1) h))
  8.   ]
  9. y[1, .05]

  10. Out[7]= 0.215532
复制代码
回复 不支持

使用道具 举报

 楼主| 发表于 2010-3-29 15:18:20 | 显示全部楼层 来自 甘肃兰州
  1. In[12]:= y[x0_, h_] :=
  2. Module[{yy, x}, yy[0] := 1; yy[x_] := yy[x - h] (1 - h (x - h));
  3.   yy[x0]]

  4. In[13]:= y[1, 0.01]

  5. During evaluation of In[13]:= $RecursionLimit::reclim: Recursion depth of 256 exceeded. >>

  6. During evaluation of In[13]:= $RecursionLimit::reclim: Recursion depth of 256 exceeded. >>

  7. Out[13]= 1.93534 Hold[1 - 0.01 (-1.52 - 0.01)] Hold[
  8.   yy$777[-1.52 - 0.01]]
复制代码
这样的写法错误在何处?能不能通过简单的修改使之能正常执行?
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2026-1-7 03:50 , Processed in 0.027901 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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