Mathematica 递归求解问题。

按年龄分组的种群增长模型,我输入完递归方程后,结果出来是这个。是哪里打错了嘛?对了,初始条件应该是x[0],不是x[1]... 按年龄分组的种群增长模型,我输入完递归方程后,结果出来是这个。是哪里打错了嘛?
对了,初始条件应该是x[0],不是x[1]
展开
 我来答
xzcyr
2013-06-19 · TA获得超过3396个赞
知道大有可为答主
回答量:1399
采纳率:100%
帮助的人:777万
展开全部

首先,Mathematica并不支持非显式的矩阵定义,所以你的x[k]要改写成显式的{x[k], y[k], z[k]},顺便你的第一行根本没有起到作用,这行东西没法申明x[k]是个3×1的矩阵;然后,矩阵的内积应该用“ . ”,最后,至少到版本8为止,RSolve还不支持这种矩阵式的方程写法,所以需要使用Thread把它变成一般形式的代数方程,总之:

RSolve[{Thread[{x[1 + k], y[1 + k], z[1 + k]} == {{1, 4, 3}, {1/2, 0, 0}, {0, 1/4, 0}}.{x[k], y[k], z[k]}], {x[1], y[1], z[1]} == {1000, 1000, 1000}}, {x[k], y[k], z[k]}, k]

一分钟左右就能算出来了,结果很长,这里就不贴了。

追问

答案里显示出来的root是什么东西?如果要求15年后时的值,代码应该怎么写呀?

追答

其实你有不懂的指令,可以把鼠标移到上面点一下,使光标移到这个指令上,再按F1,就可以调出相关的帮助了,Mathematica的帮助是很强大的……这个Root,简单地说,就是表示这里的数值,是Root里面的那个方程的一个根。要求15年后,很简单(注意代码已经做了一些小修改——我想你想要的是数值值吧):

sol = RSolve[{Thread[{x[1 + k], y[1 + k], z[1 + k]} == {{1, 4, 3}, {1/2, 0, 0}, {0, 1/4, 0}}.{x[k], y[k],z[k]}], {x[0], y[0], z[0]} == {1000, 1000, 1000}}, {x, y, z}, k];
{x[15], y[15], z[15]} /. sol // N

(* {{1.49462*10^8, 3.62857*10^7, 4.40469*10^6}} *)
TableDI
2024-07-18 广告
仅需3步!不写公式自动完成Excel vlookup表格匹配!Excel在线免,vlookup工具,点击16步自动完成表格匹配,无需手写公式,免费使用!... 点击进入详情页
本回答由TableDI提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式