ynhh
发表于 2019-7-4 20:03:33
cad890 发表于 2019-7-4 18:18
应该是图片化简过程出错了,绿色线框处积分化简使用条件为a>0,即F>0;
而F不能保证大于0(如φ=0时,B= ...
之前说不是这个图
也不知我说的图对不对
如不对就算了
太麻烦您真是不好意思
那就算了吧
您也不用再费心了
谢谢您的多次费心指导
谢谢
highflybird
发表于 2019-7-5 01:29:32
cad890 发表于 2019-7-4 18:18
应该是图片化简过程出错了,绿色线框处积分化简使用条件为a>0,即F>0;
而F不能保证大于0(如φ=0时,B= ...
CAD890很有见识,的确是要考虑小于0 的情况,如果考虑小于0 的情况,则是正确的,用LISP得到的结果也正确了。
highflybird
发表于 2019-7-5 20:03:48
已经用龙贝格积分法解决,需要lisp的移步到http://bbs.mjtd.com/forum.php?mod=viewthread&tid=179815&page=1&extra=#pid844670查看。2#楼贴出了源代码。
ynhh
发表于 2019-7-5 22:30:17
highflybird 发表于 2019-7-5 20:03
已经用龙贝格积分法解决,需要lisp的移步到http://bbs.mjtd.com/forum.php?mod=viewthread&tid=179815&page ...
谢谢高大师
已选择您为最佳答案
应是悬赏已兑现
我好好学习一下
谢谢您的耐心指导
highflybird
发表于 2019-7-8 23:06:12
本帖最后由 highflybird 于 2019-7-8 23:40 编辑
在此,我还是 贴出源代码,可以看出,高斯-切比雪夫法在求此类型积分上有很高的效率。
;;;=============================================================
;;; 高斯-切比雪夫积分
;;; 此方法用于针对 sqrt(1-x^2)*f(x)型的积分有很高的效率。
;;; 输入: foo 函数名,arg 除自变量x外的参数列表, n迭代次数。
;;; 输出: 此类积分的数值.
;;; 说明: 此积分法效率较高,n取值一般10次左右就达到有效浮点精度.
;;; http://mathworld.wolfram.com/Chebyshev-GaussQuadrature.html
;;;=============================================================
(defun Math:Gauss-Chebyshev (foo args n)
(setq wi (/ pi n))
(setq sx 0)
(setq i 1)
(repeat n
(setq xi (cos (/ (* pi (- i 0.5)) n)))
(setq fi (apply foo (cons xi args)))
(setq sx (+ sx fi))
(setq i(1+ i))
)
(* wi sx)
)
;;;=============================================================
;;; 用高斯-切比雪夫积分法求椭球带面积
;;; 输入: a,b,c,椭球的x,y,z半轴长。h是其高(Z方向)与c的比值(-1<=h<=1)
;;; 输出: 所求椭球带的表面积.
;;;=============================================================
(defun ELL:GetSurfaceArea3 (a b c h / func v)
(defun Func (x a b c h / F G K R Y Z)
(setq k (* a a))
(setq g (- 1 (* (- 1 (/ k b b)) x x)))
(setq f (1- (/ k c c g)))
(setq y (1+ (* f h h)))
(if (zerop f)
(* (sqrt g) (1+ (sqrt y)))
(if (< f 0)
(setq z (* h (sqrt (- f)))
r (* (sqrt g) (+ (sqrt y) (/ (asin z) z)))
)
(setq z (* h (sqrt f))
r (* (sqrt g) (+ (sqrt y) (/ (asinh z) z)))
)
)
)
)
(setq v (/ (+ a b c) 3.0)) ;设置与三个半轴长的平均值,防止误差增大
(setq a (/ a v)) ;X 半轴长与平均值的比值
(setq b (/ b v)) ;Y 半轴长与平均值的比值
(setq c (/ c v)) ;Z 半轴长与平均值的比值
(* b c h v v (Math:Gauss-Chebyshev 'func (list a b c h) 20));在此例程中设置20可以满足精度
)
highflybird
发表于 2019-7-8 23:07:43
highflybird 发表于 2019-7-8 23:06
在此,我还是 贴出源代码,可以看出,高斯-切比雪夫法在求此类型积分上有很高的效率。
此类求法与龙贝格求得的一样的结果,不过迭代次数更少。
ynhh
发表于 2019-7-9 08:33:56
highflybird 发表于 2019-7-8 23:07
此类求法与龙贝格求得的一样的结果,不过迭代次数更少。
感谢高飞大师
您的精神是全国科技工作者学习的榜样:victory: