求用MATLAB如何实现递归计算
Matlab 递归调用来隔离方程的根,怎么编写递归函数?
functionmyerfen()
clc;
clear;
formatlong;
p=[1,-5,3,1,-7,7,-20];%利用p存储f(x)的系数行向量
f=poly2str(p,'x');%将多项式转变为字符串,变量用x表示
fprintf('f(x)=%s',f);%输出f(x)的表达式
%二分法进行根的隔离
a0=-1;
b0=5;
e=0.1;
i=1;
gqj=[];
gqj=erfen(p,a0,b0,e,i,gqj)
end
functiongqj=erfen(p,a,b,e,i,gqj)
ifpolyval(p,a)*polyval(p,b)<0&&abs(b-a)<e
gqj(i,1)=a;
gqj(i,2)=b;
i=i+1;
elifpolyval(p,a)*polyval(p,(a+b)/2)<0
gqj(i,1)=a;
gqj(i,2)=b;
i=i+1;
gqj=erfen(p,a,(a+b)/2,e,i,gqj);
el
gqj(i,1)=a;
gqj(i,2)=b;
i=i+1;
gqj=erfen(p,(a+b)/2,b,e,i,gqj);
end
end
matlab分段+递归函数的表示方法
这里不用递归,递推就可以了
先计算每个区间的基数,
例如第一个区间为0,第二个区间为f(t(2)),第三个区间为f(t(3))。。
这是可以根据关系递推的
然后,计算函数值的时候,关键是要区分其应该在哪个区间
函数入下
functionf=fun(t,x)%要求t一定是递增的数列
b=zeros(size(t));
b(1)=0;b(end)=nan;
forii=2:length(t)-1
b(ii)=b(ii-1)+2*t(ii)^(ii-1);%计算每个区间的基数
end
num=interp1(t,1:length(t),x);
num=ceil(num)-1;%插值计算x划分在哪个区间
num(isnan(num))=length(t);%处理超过t范围的值
num(num==0)=1;%处理第一个x=t(1)
f=b(num)+2*x.^num;%计算函数值,每个区间的基数加上变量
end
将以上内容保存为fun.m
然后在命令行输入如下的代码,看分段函数的图像
x=1:0.1:9;
y=fun([1 3 5 7 9],x);
plot(x,y);
理论上,t可以有更多的值,分更多的区间,不过要求t是单调递增的数列
matlab如何用递归法求阶乘
matlab 递归调用例子
递归公式 Pc,t = 0.88 * Pc-1,t + 0.12 * Pc-1,t-1
其中c是自变量,范围(1,201),步长为1,Pc,t为函数值(c,t为P的下标)。且P1,1=0.12, Pc,0=0; 当c<t时,Pc,t=0。
程序如下:
function[p]=diguihashu(c,t)
ifnargin==0,
c=1;t=0;
end
ct=[c,t];
action_ct=num2str(ct);
switch(action_ct)
ca'11'
p=0.12;
caaction_ct
temp=str2num(action_ct);
cc=temp(1);tt=temp(2);
iftt==0||cc<tt
p=0;
el
p=0.88*diguihashu(c-1,t)+0.12*diguihashu(c-1,t-1);
end
otherwi,
error('Unkonwnacctionstring!');
end
%测试结果:
>>pct=diguihashu(12,5)
pct=
0.0034
%下面是画图程序:
clear
p=zeros(15,15);
forc=1:15
fort=1:15
p(c,t)=diguihashu(c,t);
end
end
[cc,tt]=meshgrid(1:15,1:15);
surf(cc,tt,p)
xlabel('c')
ylabel('t')
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
matlab递归问题
主程序
clc,clear all,clo all
n=1;
while n<20
y=recur(n);
stem(n,y(1:length(n)),'filled'),hold on
n=n+1;
end
xlabel('n'),ylabel('y')
自定义函数
function y=recur(n)
if n==0
y=0.3;
return;
el
y=0.3+(0.7).*recur(n-1);
return;
end
end
运行结果
本文发布于:2023-02-28 19:16:00,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/167760667857883.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:matlab递归函数(matlab递归函数求n!).doc
本文 PDF 下载地址:matlab递归函数(matlab递归函数求n!).pdf
留言与评论(共有 0 条评论) |