You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LibreOffice Calc中求解基于Miner与Wöhler公式的非线性方程并映射至对应数据列

如何在LibreOffice Calc中求解基于Miner与Wöhler公式的非线性方程并映射至对应数据列

嗨,针对你这个结合Miner和Wöhler公式的非线性方程求解需求,我来一步步教你在LibreOffice Calc里实现,还能把结果批量映射到你的数据列中~

首先咱们先把公式理清楚,方便后续在Calc里写表达式:
已知Wöhler公式的对数形式:

log₁₀(Nᵢ) = 7*(1 - (σfᵢ - σₑ)/(σᵤ - σₑ))
其中σᵤ是全局变量(你设定为1300),我们可以把它转换成Nᵢ的直接计算式:
Nᵢ = 10^(7*(1 - (σfᵢ - σₑ)/(1300 - σₑ)))

然后代入Miner的损伤累积方程:

n₁/N₁ + n₂/N₂ = 1
这就变成了一个关于σₑ的非线性方程,我们要对每一行的A列(n₁)、B列(n₂)、C列(σf₁)、D列(σf₂)求解σₑ。

下面提供两种可行的方法,你可以根据需求选择:

方法一:使用Solver非线性规划扩展(适合精准求解)

你提到找不到Solver的文档,没关系,我给你一步步拆解操作:

  1. 确认Solver扩展已安装:打开Calc,点击「工具」→「扩展管理器」,检查是否有「Solver for Nonlinear Programming」;如果没有,直接在扩展管理器里搜索安装即可。
  2. 准备数据与公式:假设你的数据从第2行开始(第1行是表头),我们在E2单元格放待求解的σₑ(先随便填个初始值,比如250),然后在F2单元格写入Miner方程的计算式:
    =A2/(10^(7*(1-(C2-E2)/(1300-E2)))) + B2/(10^(7*(1-(D2-E2)/(1300-E2))))
    
    这个公式会根据当前E2的σₑ值,计算Miner方程左边的结果,我们的目标是让这个结果等于1。
  3. 配置Solver参数:
    • 点击「工具」→「Solver」打开面板;
    • 「目标单元格」选择F2,「目标值」输入1,「通过改变单元格」选择E2;
    • 添加约束条件:点击「添加」,设置E2 >= 200和E2 <= 300(和你在Maxima里的求解范围一致);
    • 求解方法选择「非线性」,因为我们的方程是非线性的;
  4. 求解并验证:点击「求解」,Solver会自动计算出E2的σₑ值,让F2的结果接近1。你可以和Maxima的结果对比,确保计算正确。
  5. 批量处理:把E2和F2的公式下拉到所有数据行,然后逐行重复上述Solver操作;如果数据量很大,也可以录制宏来批量执行求解步骤。

方法二:使用内置的目标搜索工具(操作更简便)

如果你觉得Solver设置太繁琐,Calc内置的「目标搜索」工具也能搞定单变量非线性方程求解:

  1. 准备公式:和方法一一样,E2填初始值250,F2写入Miner方程的计算式;
  2. 启动目标搜索:选中F2单元格,点击「工具」→「目标搜索」;
  3. 设置参数:在对话框中,「目标值」填1,「可变单元格」选择E2;
  4. 自动求解:点击「确定」,Calc会自动迭代计算,找到让F2等于1的E2值(σₑ);
  5. 批量处理:同样可以录制宏,把目标搜索的操作录下来,然后对每一行数据运行宏,实现批量求解。

一些小提示

  • 初始值尽量选在200-300之间(比如250),这样迭代更容易收敛;
  • 如果出现求解失败的情况,先检查公式是否写错,或者确认σₑ的范围是否合理(你的σf都在200-300,σₑ的解大概率也在这个区间);
  • 可以拿一组数据在Maxima和Calc里分别求解,对比结果验证正确性。

备注:内容来源于stack exchange,提问作者Foad S. Farimani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:37:41