求用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,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/167760667857883.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:matlab遞歸函數(matlab遞歸函數求n!).doc
本文 PDF 下載地址:matlab遞歸函數(matlab遞歸函數求n!).pdf
| 留言與評論(共有 0 條評論) |