概述
已知函数值求自变量值
(借鉴了该回答)
1、先写个.m文件
function out=solveSyms(in) %add necessary inputs and outputs
syms x;
f = x^3+2*x == in;
x = solve(f,x);
out = x;##
end
2、在外部调用
>> coder.extrinsic('solveSyms');
>> out = solveSyms(12)
out =
2
- 5^(1/2)*1i - 1
- 1 + 5^(1/2)*1i
上面out给出了三个结果,我们只要实数值,可以利用如下表达获得实数值:
>> out=out(~logical(imag(out)))
out =
2
当解不出解析解时,会返回一个空值:
>> syms a ;
>> f = asin(2.9*a/5.9718)+asin(0.0309*2.9*a/3.08) == 3.1301;
>> solve(f,a)
ans =
Empty sym: 0-by-1
>> length(ans)
ans =
0
————————
M-fnc相关
在sinmulink中上述Xg由四个输入通过运算得到,出现问题,提示为“Simulink does not have enough information to determine output sizes for this”,在matlab function 代码那里,在 EDITOR 里找 Edit Data, 把信号 type 或者 limit range 改改应该就好了。借鉴了该回答
————————
模块学习
【Fourier】
得到信号的谐波的幅值、相位信息。
用该模块取得电压、电流的基波幅值、相位信息。
【Magnitude-Angle to Complex】
将幅值和/或相位角信号转换为复信号。注意角度必须为弧度!
【搭建 功率 测量模块】
————————2019年1月10日————————
一个很坑的事情是,傅里叶模块计算出的相位是“角度”单位,而Magnitude-Angle to Complex输入的相位是“弧度”单位,这两者要转换就要注意这个问题!
——————
在知道电压源相位时,可用锯齿波直接生成相位信息,作为dq变换的输入,这样可以避免PLL跟踪带来的动态响应。
更进一步,将abc信号变换成dq坐标下(不考虑零序)的复数形式的相量:
abc —dq—> complex模块内部:
一串数据取特定间隔
如:V为25001*1的数据,需要以10为间隔取数据,得到新的数据:
V1 = V(1:10:25e3,:);
vpa()函数:求出方程的数值解
>> solve(s^3 == 1)
>ans =
1
- (3^(1/2)*1i)/2 - 1/2
(3^(1/2)*1i)/2 - 1/2
>> vpa(ans)
ans =
1.0
- 0.5 - 0.86602540378443864676372317075294i
- 0.5 + 0.86602540378443864676372317075294i
最后
以上就是故意龙猫为你收集整理的MATLAB/Simulink学习笔记的全部内容,希望文章能够帮你解决MATLAB/Simulink学习笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复