日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB设置x为0到10所有数,MATLAB教学_10数值微积分

發(fā)布時間:2025/3/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB设置x为0到10所有数,MATLAB教学_10数值微积分 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文學習視頻地址:https://www.bilibili.com/video/av68228488?p=10

課堂PPT以及本人學習代碼已上傳。

本文學習內(nèi)容:

多項式的微分和積分

數(shù)值的微分和積分

目錄

多項式的表示方法

polyval()

polyder()

16分鐘練習

conv()

polyint()

Numerical Differentiation

39分鐘練習

45分鐘練習

47分鐘練習

多次積分

數(shù)值積分

Midpoint rule :

Trapezoid rule

Function Handles(@)

創(chuàng)建函數(shù)句柄

匿名函數(shù)

多項式的表示方法

例如: f(x)=x^3-2x-5;

也就是 x^3 的系數(shù)為1, x^2的系數(shù)為0, x 的系數(shù)為 -2, 常數(shù)為-5;

所以 p=[1 0 -2 -5];

polyval()

y?= polyval(p,x)?計算多項式?p?在?x?的每個點處的值。參數(shù)?p?是長度為?n+1?的向量,其元素是?n?次多項式的系數(shù)(降冪排序):

p(x)=p1^xn+p2^(xn?1)+...+pn^x+pn+1.

雖然可以為不同目的使用?polyint、polyder?和?polyfit?等函數(shù)計算?p?中的多項式系數(shù),但您也可以為系數(shù)指定任何向量。

要以矩陣方式計算多項式,請改用polyvalm。

[y,delta] = polyval(p,x,S)?使用?polyfit?生成的可選輸出結(jié)構(gòu)體?S?來生成誤差估計值。delta?是使用?p(x)?預測?x?處的未來觀測值時的標準誤差估計值。

clear all; %6分鐘練習

clc;

a=[9,-5,3,7]; %構(gòu)建多項式的系數(shù)

x=-2:0.01:5;

f=polyval(a,x); %計算多項式 f在每個x 點的值

plot(x,f,'LineWidth',2,'Color','red'); %用圖表示出來

xlabel('x'); ylabel('f(x)');

set(gca,'FontSize',14);

polyder()

多項式微分

clear all; %11分鐘練習

clc;

p=[5 0 -2 0 1];

polyder(p) %f'(p)

polyval(polyder(p),7) % f'(7)

16分鐘練習

做出來和老師的不一樣。有的彈幕說是p=[5 -7 5 10];? ?這里想不通。

conv()

w = conv(u,v)?返回向量?u?和?v?的卷積。如果?u?和?v?是多項式系數(shù)的向量,對其卷積與將這兩個多項式相乘等效。

w = conv(u,v,shape)?返回如?shape?指定的卷積的分段。例如,conv(u,v,'same')?僅返回與?u?等大小的卷積的中心部分,而?conv(u,v,'valid')?僅返回計算的沒有補零邊緣的卷積部分。

clear all; %16分鐘練習

clc;

p=[20 -7 5 10];

q=[4 12 -3];

x=-2:0.01:1;

f=conv(p,q); %如果是兩個相乘的是行向量,則可以直接使用 conv()

a=polyval(f,x); %計算 f(x)的值

b=polyval(polyder(f),x); %計算 f'(x)的值

plot(x,a,'--b',x,b,'red','LineWidth',2);

xlabel('x');

legend('f(x)',"(f'(x))")

polyint()

多項式積分

q?= polyint(p,k)?使用積分常量?k?返回?p?中系數(shù)所表示的多項式積分。

q?= polyint(p)?假定積分常量?k = 0。

clear all; %22分鐘練習

p=[5 0 -2 0 1];

x=-2:0.01:8

polyint(p,3) %求積分,常數(shù)指定為3

f=polyval(polyint(p,3),x); %計算積分的值

plot(x,f);

polyval(polyint(p,3),7) %求x=7時積分的值

Numerical Differentiation

diff()

差分和近似導數(shù)

Y?= diff(X)?計算沿大小不等于 1 的第一個數(shù)組維度的?X?相鄰元素之間的差分:

如果?X?是長度為?m?的向量,則?Y = diff(X)?返回長度為?m-1?的向量。Y?的元素是?X?相鄰元素之間的差分。 Y = [X(2)-X(1) X(3)-X(2) ... X(m)-X(m-1)]

如果?X?是不為空的非向量 p×m 矩陣,則?Y = diff(X)?返回大小為 (p-1)×m 的矩陣,其元素是?X?的行之間的差分。 Y = [X(2,:)-X(1,:); X(3,:)-X(2,:); ... X(p,:)-X(p-1,:)]

如果?X?是 0×0 的空矩陣,則?Y = diff(X)?返回 0×0 的空矩陣。

Y?= diff(X,n)?通過遞歸應用?diff(X)?運算符?n?次來計算第 n 個差分。在實際操作中,這表示?diff(X,2)?與?diff(diff(X))?相同。

Y?= diff(X,n,dim)?是沿?dim?指定的維計算的第 n 個差分。dim?輸入是一個正整數(shù)標量。

clear all; %30分鐘練習

f=[1 2 5 2 1];

diff(f) %diff()返回的是 [2-1 5-2 2-5 1-2]

x=[1 2]; %因為要求斜率,所以根據(jù)坐標,將X和Y的坐標重新規(guī)劃

y=[5 7];

slope=diff(y)./diff(x) %這里用點乘,以防x 和 y是多個數(shù)據(jù)的矩陣

clear all; %34分鐘練習

% x=0:pi/50:2*pi;

% f=sin(x);

% g=polyder(f); %這里不能用polyder(),因為這個函數(shù)是多項式求導,并不是連續(xù)函數(shù)

% polyval(g,x)

x0=pi/2; h=0.1;

x=[x0 x0+h];

y=[sin(x0) sin(x0+h)];

m=diff(y)./diff(x)

39分鐘練習

x0=pi/2; h=0.1; %39分鐘練習

for i=1:6

x=[x0 x0+h];

y=[sin(x0) sin(x0+h)];

m(i)=diff(y)./diff(x);

h=h/10;

end

format long

m

45分鐘練習

%%

h=0.5; x=0:h:2*pi; %45分鐘練習

y=sin(x);

m=diff(y)./diff(x);

plot(x,y);

x(length(x))=[]; %彈幕大神,把x的最后一項設置為空。以此和plot()匹配

hold on

plot(x,m)

%%

h=0.5; x=0:h:2*pi; %另一個方法

y=sin(x);

m=diff(y)./diff(x);

plot(x,y);

hold on

plot(x(:,1:end-1),m) %這里用到end的一個用法:索引

%x(:,1:end-1), 冒號是表示所有行,因為在第一個屬性里,第二個1:end-1 表示 從第一列到倒數(shù)第二列。

使用?end?訪問矩陣?A?的最后一行。

A = magic(3)

A = 3×3

8 1 6

3 5 7

4 9 2

B = A(end,1:end) %這里第一個end 是最后一行, 第二個 1:end 是指列從第1列到最后一列

B = 1×3

4 9 2

具體可以查看:https://ww2.mathworks.cn/help/matlab/matlab_oop/object-end-indexing.html

不過我沒看懂。

clear all; %46分鐘練習

g=colormap(lines); %首先是將內(nèi)置的colormap(lines)賦值給了g, lines是里面內(nèi)置的一種線的顏色矩陣

hold on;

for i=1:4

x=0:power(10,-i):pi; % power()是按元素爾冪函數(shù),這里是10^(-i)

y=sin(x); m=diff(y)./diff(x);

plot(x(:,1:end-1),m,'Color',g(i,:)); %一共有4條線,依次取了lines里面第1行到第4行的顏色

end

hold off;

set(gca,'xlim',[0 pi/2]);

set(gca,'ylim',[0 1.2]);

set(gca,'FontSize',18);

set(gca,'XTick',0:pi/4:pi/2);

set(gca,'XTickLabel',{'0','\pi/4','\pi/2'});

h=legend('h=0.1','h=0.01','h=0.001','h=0.0001');

set(h,'FontName','Times New Roman');

box on;

C = power(A,B)?是執(zhí)行?A.^B?的替代方法,但很少使用。它可以啟用類的運算符重載。

47分鐘練習

這里exp(x)? ; 就是e^x;

clc;

clear all; %47分鐘練習

g=colormap(flag);

hold on;

for i=1:3

x=0:power(10,-i):2*pi;

y=exp(-x).*sin(x.^2/2);

m=diff(y)./diff(x);

plot(x(:,1:end-1),m,'Color',g(i,:));

end

plot(x,y,'Color',g(4,:));

hold off;

xlim([0 2*pi]);

set(gca,'FontSize',20);

set(gca,'XTick',0:pi/2:2*pi);

set(gca,'XTickLabel',{'0','\pi/2','\pi','3\pi/2','2\pi'});

legend('h=0.1','h=0.01','h=0.01','h=0.001','y(x)');

xlabel('x');

ylabel('y');

box on;

多次積分

思路是先算出一次的積分,再用一次的積分再求積分。

clear all; clc; %49分鐘練習

x=-2:0.005:2;

y=x.^3;

m=diff(y)./diff(x);

m2=diff(m)./diff(x(:,1:end-1));

plot(x,y,x(1:end-1),m,x(:,1:end-2),m2);

數(shù)值積分

區(qū)間積分也就是求面積。有兩種方法:

Midpoint rule :

就是取中間點。在這個方法里面 h,也就是寬度是一定的。只有高度不一樣。高度也就是f(x)的值 。

下面的圖,老師講了怎么獲取這個中間點的辦法。第1個 x 矩陣是從x1開始,第二個矩陣是從x2開始,這兩個相加除2就是中間點。

clear all; clc; %59分鐘練習

h=0.05; x=0:h:2;

midpoint=(x(1:end-1)+x(2:end))./2; %求積分也就是求面積,算出每個中間點

y=4*midpoint.^3; % 用中間點帶入到積分中,得出y值;

s=sum(h*y) %求出用寬度 h和高度 y的乘積并相加

%如果要精度更高,可以把 h 取小

Trapezoid rule

是用梯形的辦法求出來。

Q = trapz(Y)?通過梯形法計算?Y?的近似積分(采用單位間距)。Y?的大小確定求積分所沿用的維度:

如果?Y?為向量,則?trapz(Y)?是?Y?的近似積分。

如果?Y?為矩陣,則?trapz(Y)?對每列求積分并返回積分值的行向量。

如果?Y?為多維數(shù)組,則?trapz(Y)?對其大小不等于 1 的第一個維度求積分。該維度的大小變?yōu)?1,而其他維度的大小保持不變。

clear all; clc; %62分鐘練習

h=0.05; x=0:h:2;

y=4*x.^3;

s=h*trapz(y) %trapz()來計算梯形數(shù)值積分

%%

clear all; clc; %64分鐘練習

h=0.05; x=0:h:2;

y=4*x.^3;

trapezoid=(y(1:end-1)+y(2:end))/2;

s=h*sum(trapezoid)

辛普森的方法會準確一點,公式不會。大家自行百度。

三種方法的比較:

Function Handles(@)

句柄就像是一個指向一個函數(shù)的指針,在使用的時候利用這個指針指向其它函數(shù),就可以調(diào)用。

例如: f=sin(x); 如果我要在函數(shù)g() 里用 f時,那么就要用指針去指向sin(x). 如下: g(@f,...)

創(chuàng)建函數(shù)句柄

通過在函數(shù)名稱前添加一個?@?符號來為函數(shù)創(chuàng)建句柄。例如,如果您有一個名為?myfunction?的函數(shù),請按如下所示創(chuàng)建一個名為?f?的句柄:

f = @myfunction;

使用句柄調(diào)用函數(shù)的方式與直接調(diào)用函數(shù)一樣。例如,假設您有一個名為?computeSquare?的函數(shù),該函數(shù)定義為:

function y = computeSquare(x)

y = x.^2;

end

創(chuàng)建句柄并調(diào)用該函數(shù)以計算 4 的平方。

f = @computeSquare; %%相當于調(diào)用

a = 4;

b = f(a)

b =

16

匿名函數(shù)

您可以創(chuàng)建指向匿名函數(shù)的句柄。匿名函數(shù)是基于單行表達式的 MATLAB 函數(shù),不需要程序文件。構(gòu)造指向匿名函數(shù)的句柄,方法是定義?anonymous_function?函數(shù)主體,以及指向匿名函數(shù)?arglist?的以逗號分隔的輸入?yún)?shù)列表。語法為:

h = @(arglist) anonymous_function

也就是在 (arglist) 里寫未知寫, 后面緊跟著寫函數(shù)

例如,創(chuàng)建一個指向用于計算平方數(shù)的匿名函數(shù)的句柄?sqr,并使用其句柄調(diào)用該匿名函數(shù)。

sqr = @(n) n.^2;

x = sqr(3)

x =

9

clear all; clc; %75分鐘練習

y=@(x) 1./(x.^3-2*x-5); %%有一個輸入數(shù)

integral(y,0,2)

f=@(x,y) y.*sin(x)+x.*cos(y); %%有兩個輸入數(shù)

integral2(f,pi,2*pi,0,pi)

f=@(x,y,z) y.*sin(x)+z.*cos(y); %%有三個輸入數(shù)

integral3(f,0,pi,0,1,-1,1)

總結(jié)

以上是生活随笔為你收集整理的MATLAB设置x为0到10所有数,MATLAB教学_10数值微积分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。