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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数学建模之MATLAB编程

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数学建模之MATLAB编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EverydayOneCat

🌈 🐱🐱🐱
🍣🍣🍣🍣🍣??N
🌈📖📜 🥢
🐱 🐱
「Sushi shop!」

知識點

1.下載

鏈接:https://pan.baidu.com/s/1DbfysOOwIoSvt8HQUw0jhw
提取碼:75mz

2.基本數學運算

2.1變量與數據操作

變量定義注意事項:

  • 變量名區分字母大小寫
  • 變量名必須以字母開頭,之后可以是任意字母、數字或下劃線
  • MATLAB語言將所識別的一切變量視為局部變量,若要將變量定義為全局變量,則應當對變量進行說明,即在該變量前加關鍵字global.

特殊變量表:

特殊變量取值
ans用于結果的缺省變量名
pi圓周率
eps計算機的最小數
flops浮點運算數
inf無窮大 如1/0
nan不等量 如0/0
i ji=j=虛數單位
nargin函數的輸入變量數目
nargout函數的輸出變量數目
realmin最小的可用正實數
realmax最大的可用正實數

2.2MATLAB常用數學函數

MATLAB 提供了許多數學函數,函數的自變量規定為矩陣變量,運算法則是將函數逐項作用于矩陣的元素上,因而運算的結果是一個與自變量同維數的矩陣。

1.基本數學函數:

abs(x):純量的絕對值或向量的長度

angle(z):復數z的相角**(Phase angle) sqrt(x):開平方 real(z):復數z**的實部

imag(z):復數z的虛部

conj(z):復數z的共軛復數

round(x):四舍五入至最近整數

fix(x):無論正負,舍去小數至最近整數

floor(x):地板函數,即舍去正小數至最近整數

ceil(x):天花板函數,即加入正小數至最近整數

rat(x):將實數x化為分數表示

rats(x):將實數x化為多項分數展開

rem(x,y):求x除以y的余數

gcd(x,y):整數xy的最大公因數

lcm(x,y):整數xy的最小公倍數

exp(x):自然指數

pow2(x)2的指數

log(x):以e為底的對數,即自然對數

log2(x):以2為底的對數

log10(x):以10為底的對數

sign(x):符號函數 (Signum function).

2.三角函數:

sin(x):正弦函數 cos(x):余弦函數

tan(x):正切函數 asin(x):反正弦函數

acos(x):反余弦函數 atan(x):反正切函數

atan2(x,y):四象限的反正切函數 sinh(x):超越正弦函數

cosh(x):超越余弦函數 tanh(x):超越正切函數

asinh(x):反超越正弦函數 acosh(x):反超越余弦函數atanh(x):反超越正切函數

3.適用于向量的常用函數:

min(x): 向量x的元素的最小值 max(x): 向量x的元素的最大值

mean(x): 向量x的元素的平均值 median(x): 向量x的元素的中位數

std(x): 向量x的元素的標準差 diff(x): 向量x的相鄰元素的差

sort(x): 對向量x的元素進行排序(Sortinglength(x): 向量x的元素個數

norm(x): 向量x的歐氏長度 sum(x): 向量x的元素總和

prod(x): 向量x的元素總乘積 cumsum(x): 向量x的累計元素總和

cumprod(x): 向量x的累計元素總乘積 dot(x, y): 向量xy的內積

cross(x, y): 向量xy的外積

+++

例:隨機抽取10 名學生的高等數學課程成績,并統計他們中的最高分、最低分以及他們的平均成績。

>> math=[88,90,77,69,92,80,74,66,95,85]; %產生10維向量 mathaver=sum(math)/10 %計算平均成績 h=max(math) %求出最高分 l=min(math) %求出最低分

2.3MATLAB矩陣

矩陣的建立:

(1)直接輸入法——A=[1 2 3;4 5 6;7 8 9]

矩陣同行元素之間由空格或逗號分隔,行與行之間用分號或回車鍵分隔;若“[ ]”中無元素表示空矩陣.

(2)利用冒號和函數——函數linspace(a,b,n)產生第一個元素為a,最后一個元素為b總數為n的行向量

>> a=1:0.5:4 % 格式是初始值:步長:終止值 a= Columns 1 through 7 1 1.5 2 2.5 3 3.5 4

(3)矩陣合并

>> B=[1 1 1] B = 1 1 1 >> C=[A;B] %分號增加行 C = 1 2 3 4 5 6 7 8 9 1 1 1 >> D=[A,B'] %逗號增加列 D = 1 2 3 1 4 5 6 1 7 8 9 1

矩陣的截取:

(1) 矩陣元素

>> A(2,3) %下標引用 ans = 6 >> A(6) %一列一列的開始數 ans = 8

序號(Index)與下標(Subscript )是一一對應的,其相互轉換關系也可利用sub2ind和ind2sub函數求得。

>> sub2ind(size(A),2,3) ans= 8 [i,j]=ind2sub(size(A),8) i= 2 j= 3

(2) 使用冒號

可以用冒號表示“直到”以及“所有行”,“所有列”,還可利用一般向量和end運算符來表示矩陣下標,從而獲得子矩陣。end表示某一維的末尾元素下

>> B=A (1:2, : ) %逗號前面是行數,表示第一行直到第二行;逗號后面列數,表示所有列 B= 1 2 3 4 5 6 >> C=A([1,3],2:end) %行數:第一行和第三行;列數:第二列直到最后 C = 2 3 8 9

+++

特殊矩陣:

zeros(m,n)生成一個 m 行 n 列的零矩陣,m=n 時可簡寫為 zeros(n)
ones(m,n)生成一個 m 行 n 列的元素全為 1 的矩陣, m=n 時可寫為 ones(n)
eye(m,n)生成一個主對角線全為 1 的 m 行 n 列矩陣, m=n 時可簡寫為 eye(n),即為 n 維單位矩陣
diag(X)若 X 是矩陣,則 diag(X) 為 X 的主對角線向量 若 X 是向量,diag(X) 產生以 X 為主對角線的對角矩陣
tril(A)提取一個矩陣的下三角部分
triu(A)提取一個矩陣的上三角部分
rand(m,n)產生 0~1 間均勻分布的隨機矩陣 m=n 時簡寫為 rand(n)
randn(m,n)產生均值為0,方差為1的標準正態分布隨機矩陣 m=n 時簡寫為 randn(n)

例:

分別建立3×3、3×2和與矩陣A同樣大小的零矩陣。

>> zeros(3),zeros(3,2),zeros(size(A))

建立隨機矩陣:
(1) 在區間[20,50]內均勻分布的5階隨機矩陣。
(2) 均值為0.6、方差為0.1的5階正態分布隨機矩陣。

>> x=20+(50-20)*rand(5) y=0.6+sqrt(0.1)*randn(5)

3.MATLAB運算

3.1基本算術運算

MATLAB的基本算術運算有:+(加)、-(減)、*(乘)、/(右除)、\ (左除)、^(乘方)。

這個就是矩陣的乘法,線性代數知識:m* n的矩陣只有和n *x的矩陣才能相乘得出m *x的矩陣。(老湯別打我,我只記得這個了😥)

3.2點運算

在MATLAB中,有一種特殊的運算,因為其運算符是在有關算術運算符前面加點,所以叫點運算。

點運算符有:
點乘: .*
點除: ./ .
點冪: .^

兩矩陣進行點運算是指它們的對應元素進行相關運算,要求兩矩陣的維數相同。

>> A.^2 ans = 1 4 9 16 25 36 49 64 81 符號運算符功 能類別
= =等于關系運算符
~ =不等于
<小于
>大于
<=小于等于
>=大于等于
&邏輯與邏輯運算符
|邏輯或
~邏輯非

例:

產生5階隨機方陣A,其元素為[10,90]區間的隨機整數,然后判斷A的元素是否能被3整除。

>> A=fix((90-10+1)*rand(5)+10) %生成5階隨機方陣A P=rem(A,3)==0 %判斷結果是一個布爾矩陣

fix()取整;rand生成0~1的隨機方陣;rem(A,B)——A/B的余數

建立矩陣A,然后找出大于4的元素的位置。

>> A=[4,-65,-54,0,6;56,0,67,-45,0] find(A>4) %返回的是索引值

3.3矩陣分析

用求逆矩陣的方法解線性方程組。備注:Ax=b其解為:x=A-1b

>> a=[2,-3,1;8,3,2;45,1,-9]; b=[4;2;17]; x=inv(a)*b

用求特征值的方法解方程:
3x5?7x4+5x2+2x?18=03x^5-7x^4+5x^2+2x-18=0 3x5?7x4+5x2+2x?18=0

>> p=[3,-7,0,5,2,-18]; A=compan(p); %友矩陣A,特征值與多項式根一樣 x1=eig(A) %求A的特征值 x2=roots(p) %直接求多項式p的零點

4.MATLAB程序設計

4.1M文件

所謂M文件就是由MATLAB語言編寫的可在MATLAB語言環境下運行程序源代碼文件。

M文件可以根據調用方式的不同分為兩類:
命令文件(Script File):自動重復執行的一組MATLAB命令和函數組合,不需輸出輸入參數。
函數文件(Function File):M文件的第一個可執行以function開始,便是函數文件,每一個函數文件定義一個函數。

例一:分別建立命令文件和函數文件,將華氏溫度f轉換為攝氏溫度c。

命令文件:

clear; %清除工作空間中的變量 f=input('temperature:'); c=5*(f-32)/9

函數文件:

function c=demo2(f) c=5*(f-32)/9;

命令窗口輸入:

>> c=f2c_fun(20) c = -6.6667

注意:函數只能調用,不能直接運行,函數調用的一般格式是:[輸出實參表]=函數名(輸入實參表)實參傳遞給形參

同時,如果需要測試多個變量,只有函數才能實現。

>> f=[20,73];c=demo2(f) c = -6.6667 22.7778

+++

例二:編寫函數文件求半徑為r的圓的面積和周長。

編寫函數文件:

function [s,p]=demo3(r) %r 圓半徑 %s 圓面 %p 圓周長 s=pi*r*r; p=2*pi*r;

我們這里計算半徑為2和3的面積和周長,命令行輸入:

>> r=[2,3];[s,p]=demo3(r) 錯誤使用 * 用于矩陣乘法的維度不正確。請檢查并確保第一個矩陣中的列數與第二個矩陣中的行數匹配。要執行按元素相乘,請使用 '.*'。出錯 demo3 (line 5) s=pi*r*r;

發現出錯,根據提示我們發現需要用點乘才能計算

%s=pi*r*r; s=pi*r.*r; >> r=[2,3];[s,p]=demo3(r) s = 12.5664 28.2743 p = 12.5664 18.8496

4.2輸入輸出

  • 數據的輸入

    從鍵盤輸入數據:A=input(‘提示信息’,‘s’);加上‘s’選項,則允許用戶輸入一個字符串。

  • >> xm=input('What''s your name?','s'); What's your name?張三
  • 數據的輸出
  • disp(輸出項)——其中輸出項既可以為字符串,也可以為矩陣。

    求一元二次方程ax2 +bx+c=0的根。

    >> a=input('a=?'); b=input('b=?'); c=input('c=?'); d=b*b-4*a*c; x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];%sqrt——平方根 disp(['x1=',num2str(x(1)),',x2=', num2str(x(2))]);%num2str——數字轉為字符串 a=?1 b=?3 c=?2 x1=-1,x2=-2

    4.3選擇結構

    4.3.1if語句:

    例一:

    隨機變量x = {0,1,2}表示每分鐘到達超市收款臺的人數,有分布列

    xk012
    pk0.40.30.3

    模擬十分鐘內顧客到達收款臺的狀況.

    r=rand(1,10);%生成10個0~1隨機數,代表每分鐘來人的pk for i=1:10if r(i)<0.4n(i)=0;elseif 0.4<r(i)&r(i)<0.7n(i)=1;elsen(i)=2;end end r n>> demo5 r =0.7060 0.0318 0.2769 0.0462 0.0971 0.8235 0.6948 0.3171 0.9502 0.0344 n =2 0 0 0 0 2 1 0 2 0

    4.3.2switch語句:

    例二:

    某商場對顧客所購買的商品實行打折銷售,標準如下(商品價格用price來表示):
    price<200 沒有折扣
    200≤price<500 3%折扣
    500≤price<1000 5%折扣
    1000≤price<2500 8%折扣
    2500≤price<5000 10%折扣
    5000≤price 14%折扣
    輸入所售商品的價格,求其實際銷售價格。

    price=input('請輸入商品價格'); switch fix(price/100) case {0,1} %價格小于200 rate=0; case {2,3,4} %價格大于等于200但小于500 rate=3/100; case num2cell(5:9) %價格大于等于500但小于1000 rate=5/100; case num2cell(10:24) %價格大于等于1000但小于2500 rate=8/100; case num2cell(25:49) %價格大于等于2500但小于5000 rate=10/100; otherwise %價格大于等于5000 rate=14/100; end price=price*(1-rate) %輸出商品實際銷售價格請輸入商品價格656 price =623.2000

    num2cell函數:num2cell(A)是把A中的每一個元素作為cell的元素,這樣每個元素是一個數;

    4.3.3for語句

    其中表達式1 的值為循環變量的初值,表達式2的值為步長,表達式3的值為循環變量的終值。步長為1時,表達式2可以省略。

    執行過程是依次將矩陣的各列元素賦給循環變量,然后執行循環體語句,直至各列元素處理完畢。

    例三:

    y=0; n=100; for i=1:ny=y+1/(2*i-1); end y

    寫出下列程序的執行結果

    >> s=0; a=[12,13,14;15,16,17;18,19,20;21,22,23]; for k=a s=s+k; end disp(s');

    這里是一行一行累加的。

    4.3.4while語句

    while語句的一般格式為:

    其執行過程為:若條件成立,則執行循環體語句,執行后再判斷條件是否成立,如果不成立則跳出循環。

    break:跳出整個循環

    continue:跳出當前循環

    例四:

    從鍵盤輸入若干個數,當輸入0時結束輸入,求這些數的平均值和它們之和。

    >> sum=0; cnt=0; val=input('Enter a number (end in 0):'); while (val~=0) sum=sum+val; cnt=cnt+1; val=input('Enter a number (end in 0):'); end if (cnt > 0) sum mean=sum/cnt end

    求[100,200]之間第一個能被21整除的整數。

    >> for n=100:200 if rem(n,21)~=0 continue end break end n

    4.3.5循環的嵌套

    若一個數等于它的各個真因子之和,則稱該數為完數,如6=1+2+3,所以6是完數。求[1,500]之間的全部完數。

    for m=1:500s=0;for k=1:m/2if rem(m,k)==0s=s+k;endendif m==sdisp(m);end end

    4.4極限

    (1) limit(f,x,a):計算當變量x趨近于常數a時,f(x)函數的極限值;
    (2) limit(f,x,a,‘right’):‘right’表示變量x從右邊趨近于a;
    (3) limit(f,x,a,‘left’): ‘left’表示變量x從左邊趨近于a

    注:正無窮,則可以用+inf

    例:

    syms x; %定義變量x limit(1/x^2-cot(x)^2,x,0) ans=2/3 syms a,b,x; limit((sin(a/x^2)+cos(b/x))^(x^2),x,inf) ans=exp(a-1/2*b^2) syms x; limit(x^x,x,0,'right') ans=1 syms t,x; limit((1+2*t/x)^(3*x),x,inf) ans = exp(6*t)

    4.5代數方程(組)的解

  • roots§:這是求多項式根的命令,其中p是多項式的系數,按降冪方式排列
  • fzero(f,x0): 在x0的附近尋找函數f的近似零點
  • solve(f,x):求解表達式f的代數方程,求解變量為x
  • solve(f1,f2,…,fn,x1,x2,…,xn):求解符號表達式f1,f2,…,fn組成的代數方程組,求解變量分別是x1,x2,…xn。
  • syms x; f='exp(x)-x-3'; %定義函數f fzero(f,[1,2]) ans =1.5052 roots([1,0,-1,-3]) ans = 1.6717 -0.8358 + 1.0469i -0.8358 - 1.0469i [a,b]=solve('3*x-y=1','x+y=3','x,y')

    4.6導數

    diff(f,x):以x為自變量,對符號表達式f求一階導數;

    diff(f,x,n):以x為自變量,對符號表達式f求n階導數。

    syms x; y='x*exp(3*x)'; y1=diff(str2sym(y),x); % 1階導數 y5=diff(str2sym(y),x,5); % 5階導數 y1,y5 syms x y=log(x+sqrt(1+x^2)); y1=diff(y,x); % 1階導數 y2=diff(y,x,2); % 2階導數 simplify(y1),simplify(y2)%結果化簡ans =1/(1+x^2)^(1/2) ans =-x/(1+x^2)^(3/2)

    這里需要留意:新版本化簡用simplify函數

    4.7函數極值

    (1) fminbnd(f,x1,x2)——求函數f在區間[x1,x2]上的極小值;

    (2) fminsearch(‘f’,x0)——求多元函數f在x0附近的極小值

    畫圖:

    syms x; f='x*cos(x)'; %定義函數f fplot(f,[-8,8]) grid; %顯示網格

    用fminbnd函數求極小值:

    [X,FVAL] = fminbnd(f,-8,8) X = 3.4256 FVAL = -3.2884 [X,FVAL] = fminbnd(f,-8,0) X = -6.4373 FVAL = -6.3610 [X,FVAL] = fminbnd(f,-4,0) X = -0.8603 FVAL = -0.5611

    用fminsearch函數求極小值:

    [X,FVAL] = fminsearch (f,2) X = 3.4256 FVAL = -3.2884 [X,FVAL] = fminsearch (f,-4) X = -6.4373 FVAL = -6.3610 [X,FVAL] = fminsearch (f,-2) X = -0.8603 FVAL = -0.5611

    4.8積分的計算

    int(f,x):以x為自變量,對被積函數或符號表達式f求不定積分;
    int(f,x,a,b):求定積分運算。a,b分別表示定積分的下限和上限。該函數求被積函數在區間[a,b]上的定積分。

    syms x s; % 表明x ,s為符號變量 f=sin(2*x)+s^2; % 定義符號表達式 int(f,x) % 對變量x求不定積分

    注意:在所求結果后加常數運行結果如下:
    ans=?1/2?cos(2?x)+s2?xans = -1/2*cos(2*x)+s^2*x ans=?1/2?cos(2?x)+s2?x

    syms x s; % 表明x ,s為符號變量 f=sin(2*x)+s^2; % 定義符號表達式 int(f,x, -pi/2,pi/2) % 對變量x求定積分, ans = s^2*pi

    4.9微分方程求解

    Dy表示y’ ;
    D2y表示y ’ ‘;
    Dy(0)=5表示y’ (0)=5

    dsolve(‘f’,’c’,’v’):這個命令包括三部分,微分方程,初始條件,指定變量。

    dsolve(‘Dy=1+y^2’) % 求一階方程的通解 ans =tan(t+C1) % C1為積分常數。 dsolve('Dy=1+y^2', 'y(0)=1') % 求特解 ans =tan(t+1/4*pi)

    4.10線性代數運算

  • 矩陣的轉置
    轉置運算符是單撇號(’)。

  • 矩陣的旋轉
    利用函數rot90(A,k)將矩陣A旋轉90o的k倍,當k為1時可省略。

  • 矩陣的左右翻轉
    對矩陣實施左右翻轉是將原矩陣的第一列和最后一列調換,第二列和倒數第二列調換,…,依次類推。MATLAB對矩陣A實施左右翻轉的函數是fliplr(A)。

  • 矩陣的上下翻轉
    MATLAB對矩陣A實施上下翻轉的函數是flipud(A)。

  • 矩陣的逆
    對于一個方陣A,如果存在一個與其同階的方陣B,使得:A·B=B·A=I (I為單位矩陣)則稱B為A的逆矩陣,當然,A也是B的逆矩陣。
    求一個矩陣的逆是一件非常煩瑣的工作,容易出錯,但在MATLAB中,求一個矩陣的逆非常容易。
    求方陣A的逆矩陣可調用函數inv(A)。

  • 方陣的行列式
    把一個方陣看作一個行列式,并對其按行列式的規則求值,這個值就稱為矩陣所對應的行列式的值。
    在MATLAB中,求方陣A所對應的行列式的值的函數是det(A)。

  • 矩陣的秩與跡
    1)矩陣的秩
    矩陣線性無關的行數與列數稱為矩陣的秩。在MATLAB中,求矩陣秩的函數是rank(A)。
    2) 矩陣的跡
    矩陣的跡等于矩陣的對角線元素之和,也等于矩陣的特征值之和。在MATLAB 中,求矩陣的跡的函數是trace(A)。

  • 矩陣的特征值與特征向量
    在MATLAB中,計算矩陣A 的特征值和特征向量的函數是eig(A),常用的調用格式有3種:

    (1) E=eig(A):求矩陣A 的全部特征值,構成向量E。
    (2) [V,D]=eig(A):求矩陣A的全部特征值,構成對角陣D,并求A的特征向量構成V的列向量。
    (3) [V,D]=eig(A,‘nobalance’):與第2種格式類似,但第2種格式中先對A作相似變換后求矩陣A的特征值和特征向量,而格式3直接求矩陣A的特征值和特征向量。

  • 編程訓練

    分段函數

    根據我國個人所得稅計算方法,編制程序,要求:使用者在系統提示下通過鍵盤輸入月工資薪金收入總數,計算機則在屏幕上顯示個人所得稅額,界面友好,方便使用

    個人所得稅計算方法:
    月個人所得稅=(月工資薪金收入-2000)*適用稅率-速算扣除數
    附表:個人所得稅稅率表(工資、薪金所得適用)

    全月應納稅所得額稅率(%)速算扣除數
    1不超過500元的5%0
    2超過500元至2000元的部分10%25
    3超過2000元至5000元的部分15%125
    4超過5000元至20000元的部分20%375
    5超過20000元至40000元的部分25%1375
    6超過40000元至60000元的部分30%3375
    7超過60000元至80000元的部分35%6375
    8超過80000元至100000元的部分40%10375
    9超過100000元的部分45%15375

    編寫Matlab命令文件:

    wages=input('請輸入您的工資:'); wage=wages-2000; if(wage<=0)tax=0; elseif(wage<=500)tax=wage*0.05; elseif(wage<=2000)tax=500*0.05+(wage-500)*0.1-25; elseif(wage<=5000)tax=500*0.05+1500*0.1+(wage-2000)*0.15-25-125; elseif(wage<=20000)tax=500*0.05+1500*0.1+3000*0.15+(wage-5000)*0.2-25-125-375; elseif(wage<=40000)tax=500*0.05+1500*0.1+3000*0.15+15000*0.2+(wage-20000)*0.25-25-125-375-1375; elseif(wage<=60000)tax=500*0.05+1500*0.1+3000*0.15+15000*0.2+20000*0.25+(wage-40000)*0.3-25-125-375-1375-3375; elseif(wage<=80000)tax=500*0.05+1500*0.1+3000*0.15+15000*0.2+20000*0.25+20000*0.3+(wage-60000)*0.35-25-125-375-1375-3375-6375; elseif(wage<=100000)tax=500*0.05+1500*0.1+3000*0.15+15000*0.2+20000*0.25+20000*0.3+20000*0.35+(wage-80000)*0.4-25-125-375-1375-3375-6375-10375; elsetax=500*0.05+1500*0.1+3000*0.15+15000*0.2+20000*0.25+20000*0.3+20000*0.35+20000*0.4+(wage-100000)*0.45-25-125-375-1375-3375-6375-10375-15375; end tax

    素數

    求[2,999]中同時滿足下列條件的數
    (1)該數各位數字之和為奇數
    (2)該數是素數

    for i=2:999a=rem(i,10);b=rem(fix(i/10),10);c=fix(i/100);if (rem((a+b+c),2)~=0)&(isprime(i)==1)%isprime判斷素數disp(i);end end

    運行結果得出以下的數:
    3 5 7 23 29 41 43 47 61 67 83 89 113 131 137 139 151 157 173 179 191
    193 197 199 223 227 229 241 263 269 281 283 311 313 317 331 337 353
    359 373 379 397 401 409 421 443 449 461 463 467 487 557 571 577 593
    599 601 607 641 643 647 661 683 719 733 739 751 757 773 797 809 821
    823 827 829 863 881 883 887 911 919 937 953 971 977 991 997

    水仙花數

    水仙花數是指一個3位自然數,其各位數字的立方和等于該數本身,輸出1000以內的水仙花數,并求其個數。

    y=[];%空矩陣 count=0; for i=100:999a=rem(i,10);b=rem(fix(i/10),10);c=fix(i/100);if(a^3+b^3+c^3==i)y=[y,i];%不斷擴充count=count+1;end end y,count

    突變素數

    當一個素數(只有兩個正因數(1和自己)的自然數即為素數)與其前一個素數的差值大于等于5時,將其稱之為“突變素數”(2不是“突變素數”),求10000以內的“突變素數”的個數.

    y=[]; k=0; count=0; for i=1:10000if isprime(i)==1if (i-k)>=5 y=[y,i];count=count+1;endk=i;end end y,count

    結果:count=820

    方差分析1

    試驗3種豬飼料的飼養效果,得到9頭豬的增重(單位:kg)如下:

    用MATLAB編程做作方差分析,估計各個總體的未知參數μi和μ。(不允許用anova1工具箱)

    先用SAS得到結果方便后面檢驗:

    data ex; do a=1 to 3;input n@@; do i=1 to n;input x@@; output;end;end; cards; 4 51 40 43 48 3 23 25 26 2 23 28 ; proc anova data=ex;class a;model x=a; run;

    SST——(每個因素的均值-總均值)^2的和
    SSA——每個水平的個數*(每個水平的均值-總均值)^2的和
    SSE=SST-SSA
    F=(SSA/(R-1))/(SSE/(n-R)) R為水平個數

    a1=[51,40,43,48]; a2=[23,25,26]; a3=[23,28]; a=[a1,a2,a3];n=length(a); b=[1 1 1 1 2 2 2 3 3]; sst=0; for i=1:nsst=sst+(a(i)-mean(a))^2; end ssa=0; for i=1:3an=a(b==i);num=length(an);ssa=ssa+num*(mean(an)-mean(a))^2; end sse=sst-ssa; f=(ssa/2)/(sse/(n-3)); p=1-fcdf(f,2,n-3); ssa,sse,sst,f,p

    可以看出和SAS所得結果一樣

    方差分析2

    測定4種種植密度下金皇后玉米的千粒重(單位:g)如下:

    用MATLAB編程做作方差分析,估計各個總體的未知參數mI和μ。(不允許用anova1工具箱)

    首先還是用SAS做出結果方便檢驗:

    data ex; do a=1 to 4;input n@@; do i=1 to n;input x@@; output;end;end; cards; 4 247 258 256 251 4 238 244 246 236 4 214 227 221 218 4 210 204 200 210 ; proc anova data=ex;class a;model x=a; run;

    編寫Matlab代碼:

    a=[247,258,256,251 238,244,246,236 214,227,221,218 210,204,200,210]; [m,n]=size(a); sst=0; for i=1:mfor j=1:nsst=sst+(a(i,j)-mean(a(:)))^2;end end ssa=0; for i=1:mfor j=1:nssa=ssa+(mean(a(i,:))-mean(a(:)))^2;end end sse=0; for i=1:mfor j=1:nsse=sse+(a(i,j)-mean(a(i,:)))^2;end end f=(ssa/m-1)/(sse/(m*n-n)); p=1-fcdf(f,m-1,m*n-n); ssa,sse,sst,f,p

    和SAS所得結果一樣

    主成分分析

    下表是某地區某時間的氣候綜合指數,其中,x1為某地區平均降水量,x2為氣壓值,x3為氣溫值,x4為絕對濕度。試用主成分分析法分析該地區的氣候綜合指數。

    x142.410.2116.84.843.613.361.199.3139.355.568.3
    x21219.424.628.824.728.318.718.39.48.13.5
    x32418.412.512.81.88.813.718.722.626.7
    x422.715.112.14.45.44.78.511.817.922.329.1
    x183.49018.847.699.6100.180.690100.8146.155.1
    x25.712.819.422.821232.821.215.18.46.7
    x327.523.717.413.39.53.62.66.814.219.622.4
    x429.423.615.112.310.66.76.28.313.718.621.2

    主成分分析的一般步驟

    (1)將觀測數據標準化,并計算及。

    (2)由相關系數矩陣****

    (3)得到特征值及各個主成分的方差貢獻率、貢獻率和累計貢獻率,并根據累計貢獻率確定主成分保留的個數。

    (4)寫出個基本方程組:

    其中,。

    利用施密特正交方法,對每一個求它的對應基本方程組的解,然后令,從而得到用所表示的主成分向量,或將代入后得到用所表示的主成分向量。

    (5)將的觀測值代入主成分向量的表達式中計算各個主成分向量。

    (6)計算原指標與主成分的相關系數即因子載荷,解釋主成分的意義。

    請按照以上算法步驟編寫MATLAB程序,不允許用princomp工具箱

    +++

    解:

    由于數據較多,我們將數據寫入excel表格并放入工作路徑中,通過讀取得到數據

    x=xlsread('jy.xlsx','Sheet1','B1:W4');%讀取表格中數據 x=x'; xx=zscore(x);%標準化 R=corrcoef(xx);%求相關系數矩陣 [v,d]=eig(R);%d-特征值,v-特征值對應的特征向量 lamda=diag(d);%將特征值抽取出來 gx=lamda/sum(lamda);%計算貢獻比例 gx=sort(gx,'descend');%倒序排序,根據計算發現留下兩個主成分 zcf=[v(:,4),v(:,3)];%將第一主成分和第二主成分特征向量抽取出來 defen=xx*zcf;%算出主成分得分 zhpj=defen*gx(1:2,:);%綜合評價=得分*貢獻率

    第四問:
    z1=0.2320?x1?0.5301?x2+0.5711?x3+0.5823?x4z1= 0.2320*x1 -0.5301*x2+ 0.5711*x3 + 0.5823*x4 z1=0.2320?x1?0.5301?x2+0.5711?x3+0.5823?x4

    z2=?0.9347?x1+0.1105?x2+0.2465?x3+0.2312?x4z2= -0.9347*x1+ 0.1105 *x2+ 0.2465 *x3+ 0.2312*x4 z2=?0.9347?x1+0.1105?x2+0.2465?x3+0.2312?x4

    綜合評價

    以下是某種算法

    (1)確定因素集;

    (2)確定評判集;

    (3)進行單因素評判得;

    (4)構造綜合評判矩陣

    (5)綜合評判:對于權重A={a1,a2,,an},計算,并根據最大隸屬度原則作出評判.

    在進行綜合評判時,根據算子的不同定義,可以得到不同的模型.

    請用MATLAB編寫上面程序,并計算下面的問題。

    考慮一個服裝評判的問題,為此建立因素集,其中u1表示花色,u2表示式樣,u3表示耐穿程度,u4表示價格.建立評判集,其中v1表示很歡迎,v2表示較歡迎,v3表示不太歡迎,v4表示不歡迎.進行單因素評判的結果如下:

    ,,

    ,.

    設有兩類顧客,他們根據自己的喜好對各因素所分配的權重分別為:

    試分析這兩類顧客對此服裝的喜好程度.

    +++

    解:

    1、因素集確定:根據題目要求,設u1 表示花色,u2 表示式樣,u3 表示耐穿程度,u4 表示價格,則得到因素集為:

    2、評判集確定:為了更好的對所有的因素做出評價,則設以下以下4 個程度:其中v1 表示很歡迎,v2 表示較歡迎,v3 表示不太歡迎,v4 表示不歡迎,由以上得到評判集:

    3、單因素評判:對花色、式樣、耐穿程度、價格4 種進行單因素評判得到以下結果:

    4、構造評價矩陣:根據以上4 種單因素評判得到的結果,得到評價矩陣:

    5、綜合評判:

    為了同時兼顧到所有因素對整體喜好程度的影響,則需要建立加權平均模型。

    B = A* R = (b1,b2 ,b2 ,b4 )

    根據以上模型在MATLAB 中編程:

    r=[0.2,0.5,0.2,0.1 0.7,0.2,0.1,0 0,0.4,0.5,0.1 0.2,0.3,0.5,0]; a=[0.1,0.2,0.3,0.4 0.4,0.35,0.15,0.1]; B=a*r

    根據最大隸屬原則可以得到,A1類顧客對產品的喜好程度為不太歡迎,A2類顧客對產品的喜好程度為比較歡迎。

    結語

    蕪湖,終于趕在忍界大戰前寫完了!今晚第三次忍界大戰!應該比春晚好看多了🤩

    上場名單
    TES 36鮫 宇智波卡薩 大手丸 宇智波水 藥師預
    IG 邁特曬 旋渦寧人 卡卡雞 佐芙 春野藍

    大伙們今晚把飯盆收一收,該減減肥了(lll¬ω¬)

    總結

    以上是生活随笔為你收集整理的数学建模之MATLAB编程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。