level 3
排空驭气奔如电
楼主
我想问一下这个报错应该如何解决



findBinaryCriticalValueOptimized[start_, end_, precision_] :=
Module[{left = 1, right = 4, mid, fLeft, fRight, fMid, iter = 0,
maxIter = 20, amp},(*初始化函数值*)amp = left;
NotebookEvaluate[
"A", InsertResults -> True];
fLeft = ampp;
amp = right;
NotebookEvaluate[
"A", InsertResults -> True];
fRight = ampp;
(*检查区间有效性*)
If[fLeft == fRight,
Return["错误:函数在区间端点值相同,请调整起始和结束值。f(left) = " <> ToString[fLeft] <>
", f(right) = " <> ToString[fRight]]];
Print["开始搜索0/1跳变的临界值..."];
Print["初始区间: [", left, ", ", right, "]"];
Print["f(left) = ", fLeft, ", f(right) = ", fRight];
Print["目标精度(区间长度): ", precision];
While[iter < maxIter && Abs[right - left] > precision, iter++;
mid = (left + right)/2;
(*设置当前变量值并运行笔记本*)amp = mid;
NotebookEvaluate[
"A", InsertResults -> True];
fMid = ampp;
Print["迭代 ", iter, ": amp = ", mid, ", f(p) = ", fMid, ", 区间长度 = ",
Abs[right - left]];
(*更新区间*)If[fMid == fLeft, left = mid, right = mid];];
Print["*** 搜索完成 ***"];
Print["最终区间: [", left, ", ", right, "]"];
Print["区间长度: ", Abs[right - left]];
Print["迭代次数: ", iter];
(*返回区间的中点作为最佳估计*)Return[(left + right)/2]]
(*执行搜索*)
criticalValue =
findBinaryCriticalValueOptimized[startValue, endValue,
desiredPrecision]
Out[4]= "错误:函数在区间端点值相同,请调整起始和结束值。f(left) = ampp, f(right) = ampp"
这个是另一个程序
测试
Global`ampp
If[amp > 2.09583, ampp = 1, ampp = 0]
originalNb = NotebookFileName[];
If[originalNb =!= $Failed, base = DirectoryName[originalNb];
nameBase = FileBaseName[originalNb];
newName = nameBase <> "_" <> ToString[amp] <> ".nb";
newPath = FileNameJoin[{base, newName}];
NotebookSave[EvaluationNotebook[], newPath];
Print["程序已保存为: ", newPath], Print["未保存的笔记本,请先手动保存"]]
2025年09月23日 11点09分
1



findBinaryCriticalValueOptimized[start_, end_, precision_] :=Module[{left = 1, right = 4, mid, fLeft, fRight, fMid, iter = 0,
maxIter = 20, amp},(*初始化函数值*)amp = left;
NotebookEvaluate[
"A", InsertResults -> True];
fLeft = ampp;
amp = right;
NotebookEvaluate[
"A", InsertResults -> True];
fRight = ampp;
(*检查区间有效性*)
If[fLeft == fRight,
Return["错误:函数在区间端点值相同,请调整起始和结束值。f(left) = " <> ToString[fLeft] <>
", f(right) = " <> ToString[fRight]]];
Print["开始搜索0/1跳变的临界值..."];
Print["初始区间: [", left, ", ", right, "]"];
Print["f(left) = ", fLeft, ", f(right) = ", fRight];
Print["目标精度(区间长度): ", precision];
While[iter < maxIter && Abs[right - left] > precision, iter++;
mid = (left + right)/2;
(*设置当前变量值并运行笔记本*)amp = mid;
NotebookEvaluate[
"A", InsertResults -> True];
fMid = ampp;
Print["迭代 ", iter, ": amp = ", mid, ", f(p) = ", fMid, ", 区间长度 = ",
Abs[right - left]];
(*更新区间*)If[fMid == fLeft, left = mid, right = mid];];
Print["*** 搜索完成 ***"];
Print["最终区间: [", left, ", ", right, "]"];
Print["区间长度: ", Abs[right - left]];
Print["迭代次数: ", iter];
(*返回区间的中点作为最佳估计*)Return[(left + right)/2]]
(*执行搜索*)
criticalValue =
findBinaryCriticalValueOptimized[startValue, endValue,
desiredPrecision]
Out[4]= "错误:函数在区间端点值相同,请调整起始和结束值。f(left) = ampp, f(right) = ampp"
这个是另一个程序
测试
Global`ampp
If[amp > 2.09583, ampp = 1, ampp = 0]
originalNb = NotebookFileName[];
If[originalNb =!= $Failed, base = DirectoryName[originalNb];
nameBase = FileBaseName[originalNb];
newName = nameBase <> "_" <> ToString[amp] <> ".nb";
newPath = FileNameJoin[{base, newName}];
NotebookSave[EvaluationNotebook[], newPath];
Print["程序已保存为: ", newPath], Print["未保存的笔记本,请先手动保存"]]