开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2753|回复: 9
收起左侧

[易语言纯源码] 解线性方程组(即多元一次方程)

[复制链接]
结帖率:0% (0/1)
发表于 2019-12-14 10:18:54 | 显示全部楼层 |阅读模式   四川省成都市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 wqstar028 于 2019-12-14 10:27 编辑

这一段时间在制作一个像素游戏,使用易语言的画板为基础,战斗方式为回合制,你砍我一刀,我捅你一剑的那种,其中的动画部分有人物跳起来攻击的,为了解决计算抛物线表达式y=ax2+bx+c的值,花了一个晚上研究出来了解三元一次方程的函数,后来索性优化了一下,目前理论以解N元一次方程,其中2<=N<正无穷大,不过,由于计算机堆栈及内存限制,N肯定是有上限的,具体是多少,我也不知道。现在我放出源码,有需要的可以自由发挥,尽情优化,发挥想像,将此函数充分利用起来。

  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  

子程序名返回值类型公开备 注
__启动窗口_首次激活  
变量名类 型静态数组备 注
经过点坐标型3
解集双精度小数型0
A双精度小数型 
B双精度小数型 
C双精度小数型 
X整数型 
Y整数型 
' 假设抛物线经过以下三点
经过点 [1].X = 12
经过点 [1].Y = 200
经过点 [2].X = 60
经过点 [2].Y = 100
经过点 [3].X = 330
经过点 [3].Y = 200
' 根据二次函数一般形式y=ax2+bx+c,得到以下三个方程。
' 12*12A+12B+C=200,提取系统形成系数表达式:144,12,1,200;
' 60*60A+60B+C=100,提取系统形成系数表达式:3600,60,1,100;
' 330*330A+330B+C=200,提取系统形成系数表达式:108900,330,1,200;
' 将三个系数表达式连接起来作为参数求A、B、C的值:
如果 (薛氏_解线性方程 (“144,12,1,200;3600,60,1,100;108900,330,1,200;”, 解集))
A = 解集 [1]
B = 解集 [2]
C = 解集 [3]
计次循环首 (画板1.宽度, X)
Y = A × X × X + B × X + C
画板1.画点 (X, Y, 取颜色值 (0, 0, 0))
延时 (10)
计次循环尾 ()
信息框 (“抛物线绘制完毕。”, #信息图标#确认钮, “系统提示”, 取窗口句柄 ())
信息框 (“此方程无解。”, #信息图标#确认钮, “系统提示”, 取窗口句柄 ())

子程序名返回值类型公开备 注
薛氏_解线性方程逻辑型 
参数名类 型参考可空数组备 注
数值表达式文本型以,号分割列,以;号分割行
解集双精度小数型
变量名类 型静态数组备 注
文本型0
文本型0
双精度小数型0
I整数型 
J整数型 
N整数型 
过程1双精度小数型0
过程2双精度小数型0
K整数型 
文本1文本型 
文本2文本型 
文本3文本型 
' 数值表达式=“3,2,5,1,26;0,-1,-4,7,14;-5,-2,1,6,18;2,1,2,2,18;”
' 以分号分割成四行,每行必须有且只有5个值,分别是线性方程矩阵的系数
行 = 分割文本 (数值表达式, “;”, )
N = 取数组成员数 ()  ' 获得N元一次方程组系统阵列文本,非方程表达式
重定义数组 (值, 假, N, N + 1)
重定义数组 (过程1, 假, N + 1)
重定义数组 (过程2, 假, N + 1)
计次循环首 (取数组成员数 (), I)
列 = 分割文本 ([I], “,”, )
如果真 (取数组成员数 () ≠ N + 1)  ' 不符合N元一次方程组的规则
返回 ()
计次循环首 (取数组成员数 (), J)
[I] [J]到数值 ([J])  ' 提取数列到矩阵
计次循环尾 ()
计次循环尾 ()
' 第一步,从上至下
计次循环首 (N - 1, I)
变量循环首 (I + 1, N, 1, J)
计次循环首 (取数组成员数 (过程1), K)
' 交叉相乘使第K项系数相等,以便于使用加减法消元
过程1 [K] = 值 [I] [K] × 值 [J] [I]
过程2 [K] = 值 [J] [K] × 值 [I] [I]
计次循环尾 ()
计次循环首 (取数组成员数 (过程1), K)
' 使用加减法消元法消元
[J] [K] = 过程1 [K] - 过程2 [K]
计次循环尾 ()
变量循环尾 ()
计次循环尾 ()
' 先将最后一个方程化系数为1,降低交叉相乘后的值的大小
[N] [N + 1] = 值 [N] [N + 1] ÷ 值 [N] [N]
[N] [N] = 1
' 第二步,从下至上
变量循环首 (N, 2, -1, I)
变量循环首 (I - 1, 1, -1, J)
计次循环首 (取数组成员数 (过程1), K)
' 交叉相乘使第K项系数相等,以便于使用加减法消元
过程1 [K] = 值 [I] [K] × 值 [J] [I]
过程2 [K] = 值 [J] [K] × 值 [I] [I]
计次循环尾 ()
计次循环首 (取数组成员数 (过程1), K)
' 使用加减法消元法消元
[J] [K] = 过程1 [K] - 过程2 [K]
计次循环尾 ()
变量循环尾 ()
变量循环尾 ()
' 将每个方程化系数为1并取回解集
重定义数组 (解集, 假, N)
计次循环首 (N, I)
如果 ([I] [I] = 0)
返回 ()
解集 [I] = 值 [I] [N + 1] ÷ 值 [I] [I]

计次循环尾 ()
返回 ()

解线性方程组.e

8.13 KB, 下载次数: 45, 下载积分: 精币 -2 枚

评分

参与人数 3好评 +3 精币 +7 收起 理由
被封禁言 + 1 支持开源~!感谢分享
易语言资源网 + 1 + 5 支持开源~!感谢分享
huaidan2015 + 1 + 2 支持开源~!感谢分享

查看全部评分


签到天数: 21 天

发表于 2023-6-23 15:33:09 | 显示全部楼层   上海市上海市
感谢分享~~
回复 支持 反对

使用道具 举报

发表于 2022-11-14 09:37:58 | 显示全部楼层   浙江省宁波市
不错的案例 可以学习下
回复 支持 反对

使用道具 举报

发表于 2022-11-14 09:37:06 | 显示全部楼层   浙江省宁波市
不错!###
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2022-7-28 12:08:00 | 显示全部楼层   福建省福州市
支持开源~!感谢分享~~
回复 支持 反对

使用道具 举报

签到天数: 6 天

发表于 2019-12-26 16:05:14 | 显示全部楼层   湖南省长沙市
感谢大佬分享,收藏学习了
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2019-12-14 20:22:10 | 显示全部楼层   湖南省株洲市
会数学的大佬!!我一听是数学我就头疼。。
回复 支持 反对

使用道具 举报

结帖率:80% (55/69)

签到天数: 23 天

发表于 2019-12-14 14:28:34 | 显示全部楼层   香港特别行政区*
一说到数学就头疼。。。。。。。。
回复 支持 反对

使用道具 举报

结帖率:84% (32/38)

签到天数: 24 天

发表于 2019-12-14 14:04:51 | 显示全部楼层   江西省宜春市
羡慕这些大佬会算数0.0
回复 支持 反对

使用道具 举报

结帖率:86% (101/117)

签到天数: 14 天

发表于 2019-12-14 11:10:54 | 显示全部楼层   河北省邯郸市
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表