[已解决] matlab报错:文本字符无效。请检查不受支持的符号、不可见的字符或非 ASCII 字符的粘贴。

[复制链接]
gyq4733 发表于 2021-4-5 10:54:37
本帖最后由 gyq4733 于 2021-4-5 11:25 编辑

想用eval函数将符号变化成符号表达式,之后对其进行积分处理,但是在eval那一行报错:文本字符无效。请检查不受支持的符号、不可见的字符或非 ASCII 字符的粘贴。
下附部分代码:
  1. syms X_1 X_2 X_3
复制代码


最佳答案


EngineerLeon 发表于 2021-4-5 12:13:42
gyq4733 发表于 2021-4-5 11:27
我按照您说的改了一下之后,他还是显示在某一行出现文本字符无效

你的inner1变量是个常数,搞vectorize(inner1)没有意义,因为常数可以提出去,这部分会导致字符串里面出现
.*        .*
也就是本来中间应该有内容的部分出现了空的乘法,自然会报错了
改成
temp1_str = ['@(X_1,X_2,X_3)(',vectorize(condition1),').*(',vectorize(condition2),').* (inner1) .*',vectorize(f)];

9 条回复


EngineerLeon 发表于 2021-4-5 11:04:42
你发的这种代码,缺太多东西别人没法验证复现的,直接把报错时eval函数的括号里面的字符串发出来看看,附上必要的数值等

gyq4733 发表于 2021-4-5 11:08:31
EngineerLeon 发表于 2021-4-5 11:04
你发的这种代码,缺太多东西别人没法验证复现的,直接把报错时eval函数的括号里面的字符串发出来看看,附上 ...

不好意思啊,因为他的报错就是说在这一行,没有说具体是在哪儿
错误使用Hot.m 第26行
错误: 文本字符无效。请检查不受支持的符号、不可见的字符或非 ASCII 字符的粘贴。

EngineerLeon 发表于 2021-4-5 11:13:12
gyq4733 发表于 2021-4-5 11:08
不好意思啊,因为他的报错就是说在这一行,没有说具体是在哪儿
错误使用Hot.m 第26行
错误: 文本字符无效 ...

你这个理解力…
我是指,你代码里面有一堆condition1、condition2等等变量,别人根本不知道是什么东西,它们转义的时候是不是会有问题,猜都没法猜。
既然这句会报错,那就改为
TestString = ['@(X_1,X_2,X_3)(',vectorize(condition1),').*(',vectorize(condition2),').*(',vectorize(condition3),').*',vectorize(inner1),'.*',vectorize(f)];
temp1_1 = eval( TestString  );
然后把 TestString  到底是个什么东西发出来,这样别人才能分析究竟是什么问题。


gyq4733 发表于 2021-4-5 11:26:15
EngineerLeon 发表于 2021-4-5 11:13
你这个理解力…
我是指,你代码里面有一堆condition1、condition2等等变量,别人根本不知道是什么东西, ...

syms X_1 X_2 X_3
lambda=1e-5;v=10;Hmin=0;Hmax=300;
f=2.*lambda.*pi.*X_1.*exp(-lambda.*pi.*X_1.^2)./(Hmax-Hmin);
condition1= (X_3<r_hot);
condition2= (X_3+v.*cos(X_2)<r_hot);
inner1=1;
temp1_str = ['@(X_1,X_2,X_3)(',vectorize(condition1),').*(',vectorize(condition2),').*',vectorize(inner1),'.*',vectorize(f)];
temp1_1=eval(temp1_str);
P_hot_n(1)=real(integral3(temp1_1,0,1000,0,pi,Hmin,Hmax,'Method','iterated','RelTol',1e-4))./(pi);

gyq4733 发表于 2021-4-5 11:27:50
EngineerLeon 发表于 2021-4-5 11:13
你这个理解力…
我是指,你代码里面有一堆condition1、condition2等等变量,别人根本不知道是什么东西, ...

我按照您说的改了一下之后,他还是显示在某一行出现文本字符无效

EngineerLeon 发表于 2021-4-5 12:13:42
gyq4733 发表于 2021-4-5 11:27
我按照您说的改了一下之后,他还是显示在某一行出现文本字符无效

你的inner1变量是个常数,搞vectorize(inner1)没有意义,因为常数可以提出去,这部分会导致字符串里面出现
.*        .*
也就是本来中间应该有内容的部分出现了空的乘法,自然会报错了
改成
temp1_str = ['@(X_1,X_2,X_3)(',vectorize(condition1),').*(',vectorize(condition2),').* (inner1) .*',vectorize(f)];
回复此楼

gyq4733 发表于 2021-4-5 14:21:52
EngineerLeon 发表于 2021-4-5 12:13
你的inner1变量是个常数,搞vectorize(inner1)没有意义,因为常数可以提出去,这部分会导致字符串里面出 ...

按照您说的我改了一下,发现还是报了一样的错误
错误使用 Hot_ana_new (第 25 行)
错误: 文本字符无效。请检查不受支持的符号、不可见的字符或非 ASCII 字符的粘贴。

EngineerLeon 发表于 2021-4-6 15:15:21
gyq4733 发表于 2021-4-5 14:21
按照您说的我改了一下,发现还是报了一样的错误
错误使用 Hot_ana_new (第 25 行)
错误: 文本字符无效。 ...

2020版,我运行
  1. syms X_1 X_2 X_3
  2. lambda=1e-5;v=10;Hmin=0;Hmax=300;
  3. r_hot = 1;
  4. f=2.*lambda.*pi.*X_1.*exp(-lambda.*pi.*X_1.^2)./(Hmax-Hmin);
  5. condition1= (X_3<r_hot);
  6. condition2= (X_3+v.*cos(X_2)<r_hot);
  7. inner1=1;
  8. temp1_str = ['@(X_1,X_2,X_3)(',vectorize(condition1),').*(',vectorize(condition2),').* (inner1) .*',vectorize(f)];
  9. temp1_1=eval(temp1_str);
  10. P_hot_n(1)=real(integral3(temp1_1,0,1000,0,pi,Hmin,Hmax,'Method','iterated','RelTol',1e-4))./(pi)
复制代码

求得
P_hot_n =   0.001719695588195

gyq4733 发表于 2021-4-6 15:49:03
EngineerLeon 发表于 2021-4-6 15:15
2020版,我运行

求得

我也试了一下已经可以了,谢谢啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表