Mathematica 按年龄分组的种群增长模型,我输入完递归方程后,结果出来是这个.是哪里打错了嘛?对了,初始条件应该

Mathematica
按年龄分组的种群增长模型,我输入完递归方程后,结果出来是这个.是哪里打错了嘛?
对了,初始条件应该是x[0],不是x[1]
风儿恋沙 1年前 已收到1个回答 举报

海气云天 幼苗

共回答了10个问题采纳率:90% 举报

首先,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]一分钟左右就能算出来了,结果很长,这里就不贴了.

1年前 追问

1

风儿恋沙 举报

答案里显示出来的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}} *)
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 1.152 s. - webmaster@yulucn.com