如何写匿名函数变量系数的传热问题

4视图(30天)
我工作在一个二维热模型3板组成。两人不断的热导率,但第三的电导率对温度的依赖关系。
相关代码:
crackT = 900;
ν= 10;
kFunc = @(地区、州)k + (k * (Nu-1) * (state.u < crackT));
thermalProperties (thermalModel“脸”,1“ThermalConductivity”k *ν,“MassDensity”,2500,“SpecificHeat”,1000);
thermalProperties (thermalModel“脸”3,“ThermalConductivity”kFunc,“MassDensity”,2500,“SpecificHeat”,1000);
thermalProperties (thermalModel“脸”2,“ThermalConductivity”、钾、“MassDensity”,2500,“SpecificHeat”,1000);
这段代码运行,但似乎地区3 k是修改的,而不是根据该地区的温度变化。
我坦白说不理解匿名函数是如何工作的——具体地说,什么“地区”、“位置”和“状态”@建筑,也不知道常见的错误 函数指定材料属性必须接受2输入参数和输出参数返回1 的意思。
如果任何人都可以解释如何使这项工作我会很感激。

答案(2)

马特·J
马特·J 2020年1月3日
编辑:马特·J 2020年1月3日
作为一个简单的例子,考虑如下
> > c = 3;
> > kfunc = @ (a, b) * c;
@ (a, b)说,右边的表达式将作为一个函数与输入参数a和b在其他表达式(特别是c)将被视为一个常数。常数变量的值将从他们的价值观在工作区中 kfunc 定义。因此,例如,
> > kfunc (2、4)% 2 * 4 - 3 = 5
ans =
5
不过,重要的是要理解 kfunc 不知道你以后做任何更改不变的东西。因此,例如,这并不在不同的输出结果:
> > c = 5;kfunc (2、4)
ans =
5
如果我想要 kfunc 需要注意的新价值 c ,我必须重建:
> > c = 5;kfunc = @ (a, b) * c;
> > kfunc (2、4)% 2 * 4 - 5 = 3
ans =
3
考虑到这一点,应该明确,你的函数的输出,
kFunc = @(地区、州)k + (k * (Nu-1) * (state.u < crackT));
只能随输入参数“状态”。“地区”输入变量定义expresssion没有出现 k + (k * (Nu-1) * (state.u < crackT)) 和其他所有的表达式从的角度来看是一个常数 kFunc
1评论
艾伦
艾伦 2020年1月3日
这非常有助于理解匿名函数,谢谢,但是我的问题的关键似乎是在使用非法“状态”和“地区”变量。状态显然是一些结构包含因变量被解决,和状态。你是变量(在我的例子中,温度)。我不能看到如何使用区域右边(我的模型有3个地区),我应该写k大如果状态。u(温度)< crackT,但这并不是出现在模型中。
我会发布一个单独的问题这些神秘的东西。

登录置评。


MandarinLu
MandarinLu 2020年10月27日
其实我最近会见了类似的问题。我读了两个贡献。尽管我喜欢分享一个案例我找到答案,并希望有更多的见解可以共享这一主题。
生成的网格节点的索引和correpsonding坐标(x, y, z) mesh.Nodes中可以找到。
然而参数如位置、国家或地区的脂肪酸的处理有不同数量的“节点”(我想这应该是)网。节点但彼此接近。我发现当我调试代码,移动鼠标位置。x或状态。你举个例子。不幸我不知道工具箱位置和大小的设置状态。
我希望有人可以分享更多的意见。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!