65.9K
CodeProject 正在变化。 阅读更多。
Home

智能数值分析文本框 (SNAT)

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.77/5 (8投票s)

2007年6月23日

6分钟阅读

viewsIcon

34996

downloadIcon

552

用于解决文本框中共享方程的有用控件。

目录

  • 引言
  • 使用控件
    • 求解共享方程
    • 求解单方程
    • 计算器
    • 数字文本框
  • 控件工作原理
  • 控件属性
  • 控件事件
  • 示例程序
  • 将控件添加到项目中

引言

假设您有以下方程

Sin(z^2)+y/3+u*h-p^2-23*h^4+Atn(Cos(j*v))-23=0

并且您的程序有7个文本框用于参数z、u、h、p、j、v和y。您的程序应该能够根据其他文本框的值和当前公式来评估每个参数的值。您可以尝试为每个参数相对于其他参数找到一个关系。例如,对于y(比其他参数更容易),我们有

y = 3* (23*h^4-Sin(z^2)-u*h-p^2-Atn(Cos(j*v))+23)

然后,您可以为文本框的值定义相应的属性。

使用控件

1. 求解共享方程

假设使用SNAT,您甚至不需要评估这些公式,也不需要制作大量的属性和方法。无需编写代码,您只需要:

  1. 为所有SNAT的参数属性命名
  2. 设置公式的值

现在,只需专注于您想要的文本框,然后按F5进行评估。这也可以通过SNAT的Solve方法完成。用户需要记住一些要点:(请仔细阅读)

1.1. 某些方程可能有多个根。在这种情况下,您必须为相应的SNAT设置Shared_MIN和Shared_MAX属性。

控件将自动查找根(如果可用)。例如,您想要一个介于10到500之间的根。SNAT在MULLER方法中从初始值255开始。如果找不到根,则域将被分成两个子域,并检查这两个子域以查找根。这些划分称为Steps,它是SNAT中的一个属性,默认值为4。一个具有4个步骤的SNAT将进行到16个分区的最终数量。

例如,绝对压力不能为负值,如果方程中有p^2,您可能会得到一个负根值。只需将Shared_MIN和Shared_MAX属性更改为逻辑上可接受的值。

2. 除X外,所有参数都区分大小写。请记住,x(或X)始终是未知数。所以您不能将其用作参数。例如,如果您有4个参数为y1、y2、z和t的SNAT。您在另一个SNAT中输入“X*y1+z^2-t*y2”并按Enter键。这将计算x的值并将其保留在当前SNAT中。

3. SNAT中以下函数有效:Sin、Cos、Tan、Atn、Abs、Int、Fix、Log、Exp、Sqr、Sgn(所有VBA数学模块函数)。有关Ln、Ei、Integration等更多函数…请等待SNAT的下一个版本。

4. 移除方程中所有可能的无穷值。例如,如果方程为((y^3+z-1)/(j*(t-1))) -2.5,当t=1或j=0时将返回无穷大。只需将公式以线性形式书写。如下所示:(y^3+z-1) -2.5*(j*(t-1))

5. SNAT是求解此类方程最快的.Net控件,因此它为此目的应用了Visual FORTRAN DLL。如果它在某些情况下冻结,这是您的Steps属性尝试在shared_minshared_max之间查找根的结果。这将触发Step_Iteration事件。如果函数不是高频的弦状,您不需要高Steps来达到目标。无论如何,我将在下一个版本中将其分离为一个单独的线程以获得更好的性能。

2. 求解单方程

参数x(或X)为此目的保留。您只需在SNAT中输入方程,按Enter键即可看到结果。您可以在方程中使用其他SNAT参数!它们彼此了解,也了解它们的值。

3. 计算器

按Enter键将直接评估SNAT中的参数。您也可以在此部分使用其他SNAT参数!

4. 数字文本框

如果将SNAT的计算器属性设置为false,它将成为一个普通的数字文本框,只能接受数字。它还有一个动态的小数点。我的意思是,如果您滚动到数字的末尾并放置一个小数点,然后返回到起始点并放置另一个小数点,第一个小数点将被删除。您还可以使用鼠标滚轮查看文本框的所有已验证值。

控件工作原理

最大的问题是我无法将.Net中函数的地址发送到Visual Fortran。但在VB6中是可以的。所以控件有3个主要的dll

  • .Net DLL
  • VB6 DLL
  • Visual Fortran DLL

.Net dll获取文本框的值,用它们的值替换函数中的参数,并生成原始方程。它将此字符串发送到vb6 dll。这个vb6 dll设置一个公共字符串的值,该字符串使用vbscript针对x的不同值进行评估。这种评估发生在函数中,vb6 dll将此函数的句柄发送到visualfortran dll来评估未知数(x)。vf dll将评估值发送给vb6,vb6发送给.net,.net发送给当前文本框!

控件属性

名称

描述

Calculate

它可以是OnEnter、OnValidate和OnBoth。

计算器

设置为true表示您想使用控件的计算能力。如果不是,它将只是一个数字文本框。

公式

SNAT之间的共享公式。在“求解共享方程”中需要。

Initial

“求解单方程”中MULLER方法的初始值。

参数

SNAT的相应参数,例如:y1.t.r.hy.ff

步骤

SNAT在用户首选边界内查找根所经过的步数。仅在“求解共享方程”中使用。

Shared_MIN

“求解共享方程”中未知数的最小值。

Shared_MAX

“求解共享方程”中未知数的最大值。

控件事件

名称

描述

Solved

当方程求解完成时触发。

Not_Solved

当方程未求解时触发。这可能是无解或方程形式错误导致无穷大等的结果。

Steps_Iteration

在“求解共享方程”中表示已完成一个步骤。

示例程序

求解共享方程

创建一个样本程序并将其包含在zip文件中是很有趣的。这就是为什么SNAT不需要任何代码,但我会向您展示在哪里设置属性来获得解决方案。这是SNAT的属性窗口,它求解方程 ((y^3+z-1)) -2.5*(j*(t-1)) = 0

Screenshot - snat2.jpg

这些是SNATs。在最后一个SNAT(j)中,按了F5键,j被评估了。

Screenshot - snat1.jpg

求解单方程

以x(或X)和其他SNAT参数的形式输入方程

Screenshot - snatAlso.jpg

然后按Enter键

Screenshot - SnatAlso2.jpg

计算器

输入参数:(此处为 y*t+z)

Screenshot - calcu1.jpg

然后按Enter键

Screenshot - calcu2.jpg

将控件添加到项目

  1. 下载zip文件并将其解压到您的应用程序运行的目录。例如,在应用程序执行的…bin\debug文件夹中。
  2. 将SNAT.dll添加到您的.NET工具箱。
© . All rights reserved.