TS-Function

TS学习

Function(函数)

基本写法

function add(x:number,y:number):number{
    return x+y
}
let myAdd = function(x:number,y:number):number{
    return x+y
}
let myAddFun:(name:string,age:number) => number = function(n:string,a:number):number{
    return a
}

可选参数

function buildName(firstName:string,lastName?:string){
    if(lastName){
        return firstName+" " + lastName
    }else{
        return firstName
    }
}
buildName("liao")
buildName("liao","mei")

默认参数

function buildName1(firstName:string,lastName = "world"){
    return firstName+" "+lastName
}
buildName1("hello")
buildName1("hello","liaomei")

可选参数

function peopelName(firstName:string, ...restOfName:string[]){
    return firstName + " " +  restOfName.join("_")
}
let p1 = peopelName("i","o","y","h")
console.log(p1)

箭头函数和this关键字的使用

var people ={
    name:['l','o','v','e'],
    getName:function(){
        return () =>{
            var i = Math.floor(Math.random()*4)
            return {
                n:this.name[i]
            }
        }
    }
}
var myName = people.getName();
alert("名字:"+ myName().n)

函数重载

function attr(name:string):string;
function attr(age:number):string;
function attr(nameorage:any):any{
    if(nameorage && typeof nameorage === "string"){
        alert("姓名")
    }else{
        alert("年龄")
    }
}
attr("hello")
attr(10)

### 使用 S-Function 的方法 S-Function 是 Simulink 提供的一种机制,允许用户通过编程语言(如 C、C++ 或 MATLAB)定义自定义的功能模块[^3]。以下是关于如何在 Simulink 中使用 S-Function 的详细介绍: #### 创建 S-Function 创建 S-Function 需要编写一段代码来描述系统的动态行为。可以使用 MATLAB 编写的 M 文件形式的 S-Function,也可以使用编译后的 C/C++ 形式的 S-Function。 ##### MATLAB M 文件形式的 S-Function M 文件形式的 S-Function 更加灵活,适合快速开发和测试。下面是一个简单的例子,展示了一个线性系统的实现方式: ```matlab function [sys,x0,str,ts] = myLinearSystem(t,x,u,flag) % 定义系统参数 A = [-1]; B = [1]; C = [1]; D = [0]; switch flag, case 0 % 初始化大小 sys = []; x0 = 0; str = []; ts = [-1,-1]; % 连续时间系统 case 1 % 输出导数 dx/dt = Ax + Bu sys = A*x + B*u; case 2 % 计算输出 y = Cx + Du sys = C*x + D*u; otherwise error(['Unhandled flag = ',num2str(flag)]); end ``` 上述代码中,`myLinearSystem` 函数实现了状态空间模型 \( \dot{x} = Ax + Bu \),\( y = Cx + Du \)。 ##### C/MEX 文件形式的 S-Function 对于性能要求较高的场景,推荐使用 C/MEX 文件形式的 S-Function。以下是一个基本框架: ```c #define S_FUNCTION_NAME my_c_s_function #define S_FUNCTION_LEVEL 2 #include "simstruc.h" static void mdlInitializeSizes(SimStruct *S){ ssSetNumSFcnParams(S, 0); /* 不需要额外参数 */ if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) { return; /* 参数数量不匹配 */ } ssSetNumContStates(S, 1); /* 设置连续状态变量的数量为1 */ ssSetNumDiscStates(S, 0); ssSetNumInputs(S, 1); /* 输入端口数量 */ ssSetInputPortWidth(S, 0, 1); ssSetNumOutputs(S, 1); /* 输出端口数量 */ ssSetOutputPortWidth(S, 0, 1); ssSetDirectFeedThrough(S, true); /* 是否有直接馈通 */ ssSetNumSampleTimes(S, 1); /* 时间采样设置 */ } static void mdlDerivatives(SimStruct *S){ real_T *x = mxGetPr(ssGetContStates(S)); /* 获取当前状态 */ real_T *u = mxGetPr(ssGetInputPortSignal(S, 0)); /* 获取输入信号 */ real_T *dx = mxGetPr(ssGetdX(S)); /* 导数存储位置 */ dx[0] = -x[0] + u[0]; /* 实现微分方程 */ } static void mdlTerminate(SimStruct *S){ } #ifdef MATLAB_MEX_FILE # include "simulink.c" #else # include "cg_sfun.h" #endif ``` 这段代码展示了如何定义一个具有单个输入和单个输出的状态空间模型,并计算其导数。 #### 将 S-Function 添加到 Simulink 模型 完成 S-Function 的编写后,在 Simulink 中可以通过 `S-Function` 块加载该函数。具体操作如下: 1. 打开 Simulink 并拖动一个 `S-Function` 块至工作区。 2. 双击该块并指定对应的 S-Function 名称或路径。 3. 如果是 C/MEX 文件,则需先将其编译为目标平台支持的形式后再链接。 #### 调试与验证 为了确保 S-Function 正确运行,可以在仿真过程中观察波形图或其他监控工具中的数据变化情况。例如,利用 Scope 组件对比实际输出与期望值之间的差异[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值