S函式(基礎1)

2021-10-05 19:50:02 字數 3392 閱讀 2141

在學習s函式的時候總是發現按照網上的很多解釋每一行的意義的文章很多,但是實際操作的時候總是不知道該如何下手,所以我就不再講每一行的意義是什麼,怎麼用,這一節我只講下面一種情況,適合有一點基礎,剛入門的人。

在寫狀態方程時如何加入狀態方程中的已知輸入量。就是如方程

xhat=ax+bu,

y=cx+du

中假如a=[1 2;3 4],那麼有很多時候a=[m f;q w],是這樣的形式出現,網上的s函式的例子也沒有相關的,讓人一下摸不著頭腦,雖然這個對於熟悉的人來說很簡單,但是對於沒有基礎的人來說很難。廢話不多說,下面是例子。

下圖中,上面的是沒有外部引數的,下面是有外部引數的。

s函式**:

沒有外部引數:

function [sys,x0,str,ts]=wentext1(t,x,u,flag)

a=[0.09 0.01;1 0];

b=[1 7;0 2];

c=[0 2;1 5];

d=[3 0;1 0];

switch flag,

case 0,

[sys,x0,str,ts]=mdinitializesizes(a,b,c,d);

case 1,

sys=mdlderivatives(t,x,u,a,b,c,d);

case 2,

sys=mdlupdate(t,x,u);

case 3,

sys=mdloutputs(t,x,u,a,b,c,d);  

case 4,

sys=mdlgettimeofnextvarhit(t,x,u);    

case 9,

sys=mdlterminate(t,x,u);    

otherwise

dastudio.error('simulink:bloks:unhandledflag',num2str(flag));

endfunction [sys,x0,str,ts]=mdinitializesizes(a,b,c,d)

sizes=simsizes;

sizes.numcontstates=2;

sizes.numdiscstates=0;

sizes.numoutputs=2;

sizes.numinputs=2;

sizes.dirfeedthrough=1;

sizes.numsampletimes=1;

sys=simsizes(sizes);

x0=zeros(2,1);

str=;

ts=[0 0];

simstatecompliance = 'unknownsimstate';

function sys=mdlderivatives(t,x,u,a,b,c,d)

sys=a*x+b*u;

function sys=mdlupdate(t,x,u)

sys=;

function sys=mdloutputs(t,x,u,a,b,c,d)

sys=c*x+d*u;

function sys=mdlgettimeofnextvarhit(t,x,u)

sampletime=1;

sys=t+sampletime;

function sys=mdlterminate(t,x,u)

sys=;

有外部引數的:

function [sys,x0,str,ts]=wentext(t,x,u,flag)

%a=[0.09 0.01;1 0];

%b=[1 7;0 2];

%c=[0 2;1 5];

%d=[3 0;1 0];

switch flag,

case 0,

[sys,x0,str,ts]=mdinitializesizes;

case 1,

sys=mdlderivatives(t,x,u);

case 2,

sys=mdlupdate(t,x,u);

case 3,

sys=mdloutputs(t,x,u);  

case 4,

sys=mdlgettimeofnextvarhit(t,x,u);    

case 9,

sys=mdlterminate(t,x,u);    

otherwise

dastudio.error('simulink:bloks:unhandledflag',num2str(flag));

endfunction [sys,x0,str,ts]=mdinitializesizes

sizes=simsizes;

sizes.numcontstates=2;

sizes.numdiscstates=0;

sizes.numoutputs=2;

sizes.numinputs=4;

sizes.dirfeedthrough=1;

sizes.numsampletimes=1;

sys=simsizes(sizes);

x0=zeros(2,1);

str=;

ts=[0 0];

simstatecompliance = 'unknownsimstate';

function sys=mdlderivatives(t,x,u)   %讓u(1);u(2)成為輸入變數,可以是其他幾個位置,其他的可以作為外部輸入的值

f=u(3);                                              %外部輸入的值可以是常數,也可以是其他,在寫**時容易出錯,主要是維度出問題

m=u(4);                                             %維度重點看u這個矩陣,容易忘記轉置

a=[0.09 f;1 m];

b=[0 7;0 2];

u=[u(1);u(2)];

sys=a*x+b*u;

function sys=mdlupdate(t,x,u)

sys=;

function sys=mdloutputs(t,x,u)

c=[0 2;1 5];

d=[3 0;1 0];

u=[u(1);u(2)];

sys=c*x+d*u;

function sys=mdlgettimeofnextvarhit(t,x,u)

sampletime=1;

sys=t+sampletime;

function sys=mdlterminate(t,x,u)

sys=;

**沒有和上文的a給出的值一樣,懶得改了,但是大概意思就是這樣,

基礎 函式1

function物件 1.定義 格式 function name param1,param2.數學式的基本公式,目前我只知道我就是長這個樣子的.2.獲取函式本身 a.arguments.callee b.函式名 c.使用作用域下的乙個指向函式的變數名 注意 函式執行時,關鍵字this 呼叫該函式的物...

Python基礎 函式 1

def 函式名 形參 1 2.格式 函式名 實參 def name a,b i a b print i name 20,30 50查詢函式的說明文件 help 函式名 def name a,b 加法函式 寫在def後一排,可以換行 i a b print i name 20,30 help name...

python基礎 函式1

一,為什麼使用函式 1,可以使 的組織結構清晰,可讀性好 2,遇到重複的問題可以直接呼叫函式 3,功能擴充套件時,可直接修改,而無需每處都進行修改 二,函式為何物 函式對程式設計師相當於巧婦之於公尺,藍翔之於挖掘機 學生之於書本。三,函式分類 1,內建函式,python直譯器已經給我們定義好了很多函...