先明确Matlab里的函数绘图也是由点连成,所以这里的函数其实可以看做数组来处理。
以三元函数(对应二维数组)为例:
clc; f=13000:100:19000; k=0:0.01:1; [f,k]=meshgrid(f,k); Us=10; Rs=0.1; Ls=10^(-4); Cs=10^(-6); Rd=0.1; Ld=10^(-4); Cd=10^(-6); Rw=10; M=sqrt(Ls.*Ld).*k; w=2.*pi.*f; I1=Us./(Rs+w.*Ls.*j+1./(w.*Cs.*j)+(w.*w.*M.*M)./(Rd+Rw+w.*Ld.*j+1./(w.*Cd.*j))); I2=j.*w.*M.*Us./(Rs+j.*w.*Ls+1./(j.*w.*Cs))./(Rd+Rw+j.*w.*Ls+w.*w.*M.*M./(Rd+Rw+j.*w.*Ls)); I1real=real(I1); I2real=real(I2); P=I1real.*Us; Pw=I2real.*I2real.*Rw; %surf(f,k,I1),hold on %surf(f,k,I2real); I2abs=abs(I2); I2absmax=max(I2abs); I2max=max(I2absmax); [kn,fn]=find(I2abs==I2max); disp(I2max); disp(fn); disp(13000+(fn-1).*100); disp(kn); disp(0+(kn-1).*0.01); disp(I2abs)
使用max()函数找出最大值,再用find()函数查找与最大值对应的元素的行列坐标。
find()函数使用说明如下:
[kn,fn]=find(I2abs==I2max)
kn,fn为当I2abs=I2max时对应的元素行列坐标。
再根据得到的行列坐标倒推两个自变量的值:
f=13000+(fn-1).*100
k=0+(kn-1).*0.01
//由变量起始值和间隔值倒推
在上例中,I2abs最大值为61.6064,对应的行列坐标为101和30,两变量的间隔值分别为100和0.01,倒推得函数最大值时量变量值为f=15900,k=1。