比如自变量都定义成 x1、x2、x3...xi 的形式,函数的形式为f(x)。
在一个文本框内输入 f(x)=2*sqr(2)*(x1)+(x2)^2+3*pi*(x3)
点击命令按钮,怎么样把里面的x1、x2、x3读成变量,
即把f(x)=2*sqr(2)*(x1)+(x2)^2+3*pi*(x3) 的表达式读取出来,因为后面的计算中是用其他方法求极值,不是简单的数值代入计算。顺便说一下,表达式里面含有sin、cos之类的函数,哪位帮忙把函数功能识别,那更是万分感激了。(怎么给不了300分?奇怪,没有办法,谁解决了,我会另外开贴给分)
如果是分析你写的那些,你就读括号吧,读到一对然后取出来中间的内容,判断是不是需要的。如果只是想要一个执行结果,你可以在窗口上放一个Microsoft Script Control,然后你试试这样:Private Sub Command2_Click()ScriptControl1.ExecuteStatement "msgbox ""this is a msgbox"""End SubExecuteStatement后面只能用VBS
Private Sub Command1_Click()
Dim f As Single
Script.AddCode "x1 = " & Text1.Text
Script.AddCode "x2 = " & Text2.Text
Script.AddCode "x3 = " & Text3.Text
Script.AddCode "pi = 3.14157"
Text4.Text = "2*sqr(2)*(x1)+(x2)^2+3*pi*(x3)"
f = Script.Eval(Text4.Text)
MsgBox f
End Sub
可参考:
http://rookscape.com/vbgaming/tutBQ.php
请问 sxs69() ,你的代码是用来求值的吧,不是用来求表达式的。因变量xi有其取值范围,故无法直接求解出表达式的值的,我需要的是读出那个表达式即可。我的目的是使用者在界面上给出变量个数(x1...xi共i个)及其取值范围,在界面上输入表达式(而不是到代码里面给出,这是我想解决的问题),然后点击命令按钮就可以读出那个表达式,最后使用里面的算法进行求解表达式的极值。希望各位帮忙。
在TEXT2中输入X2值
在TEXT3中输入X3值
在TEXT4中输入表达式f = Script.Eval(Text4.Text)就是表达式的极值
1。数字:if(str(val(token))=token,肯定是数字(当然要考虑数字的精度,以免出现错误,其实你可以判断里面是否只有数字或小数点来判断)。2。后面直接带右括号的肯定是函数名。(如果保证常数和变量都在括号里,则在扫描语句的过程中可以直接过滤调函数名)这其实就是编译系统的词法分析
select token
case "sin"
y=sin(x)
case "cos"
y=cos(x)
.......
end select我曾经写过一个公式翻译的模块的,不过后来用VC重写,VB代码丢弃了。
加入还有括号嵌套,真的很复杂。VB的这方面的代码很少见,可以找个C语言的参考一下。
谢谢sxs69() 的解答,不过可能我没有表达清楚,举一个简单的例子吧: y=2*(x1)^2+5(x2) 其中 0<x1<1, 0<X2<1, x1+x2<1.5, 2*(x1)+5*(x2)<2 求min(y),这样的例子不能用你的方法求解吧。 lazycat818(lazycat818) 说的正是我想要搞明白的,可惜编程懂的较少。不知道哪位兄弟有公式翻译的模块,C语言也行,帮忙贴出来,先谢谢了。