我有一个非常复杂的mathematica表达式,我想通过使用一个新的,可能无量纲的参数来简化.
我的表达的一个例子是:
K=a*b*t/((t+f)c*d);
Run Code Online (Sandbox Code Playgroud)
(实际表达式是巨大的,数千个字符).我想用p替换所有出现的表达式t /(t + f)
p=t/(t+f);
Run Code Online (Sandbox Code Playgroud)
这里的目标是找到一个替代品,以便所有的t和f都被p代替.在这种情况下,替换p是一个无量纲化的参数,因此它似乎是一个很好的候选替代品.
我无法弄清楚如何在mathematica中做到这一点(或者如果可能的话).我试过了:
eq1= K==a*b*t/((t+f)c*d);
eq2= p==t/(t+f);
Solve[{eq1,eq2},K]
Run Code Online (Sandbox Code Playgroud)
毫不奇怪,这不起作用.如果有一种方法可以强制它用p,a,b,c,d来解决K ,这可能会起作用,但我也无法弄清楚如何做到这一点.思考?
编辑#1(11/10/11 - 1:30)[删除以简化]
好的,新机智.我采用了p = ton /(ton + toff)并将p乘以几个表达式.我知道p可以完全消除.新表达式(以p表示)是
testEQ = A B p + A^2 B p^2 + (A+B)p^3;
Run Code Online (Sandbox Code Playgroud)
然后我替换p,并调用(正常)FullSimplify,给我这个表达式.
testEQ2= (ton (B ton^2 + A^2 B ton (toff + ton) +
A (ton^2 + B (toff + ton)^2)))/(toff + ton)^3;
Run Code Online (Sandbox Code Playgroud)
最后,我尝试了下面的所有建议,除了最后一个(不知道它是如何工作的!)
只有消除选项有效.所以我想我会从现在开始尝试这种方法.谢谢.
EQ1 = a1 == (ton (B ton^2 + A^2 B ton (toff + ton) +
A (ton^2 …Run Code Online (Sandbox Code Playgroud) 当datact = 10736尝试插入unordered_map时,会发生分段错误(请参阅调用行,该调用行将调用该错误).请参阅下面的尝试修复.
当抛出SIGSEGV时,它指向我的第764行 hashtable_policy.h
INPUT:数据文件,其中column1 = count,column2 = 16个字符的字符串
目的:通过将1-替换不同序列的所有计数加在一起来聚类16个字符的序列.看到的第一个序列是"起源",通过它来识别其所有的1个替换朋友.
PSEUDOCODE:对于文件中的每一行:
读取计数,读取序列.
如果序列key_value存在于散列'location'(类型unordered_map)中,则添加当前计数;
否则创建一个新的key_value,让它指向此处的计数,并指定所有1个替换序列也指向此计数.
码:
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <cmath>
#include <vector>
#include <unordered_map>
#include <map>
#include "matrix.h"
using namespace std;
int nuc2num(char currchar)
{ // returns 0,1,2,3 for A,C,T,G respectively
int outnum;
if (currchar=='A')
{
outnum=0;
}
else if (currchar=='C')
{
outnum=1;
}
else if (currchar=='T')
{
outnum=2;
}
else
{
outnum=3;
}
return outnum;
}
int main(int argc, char* argv[])
{
//command …Run Code Online (Sandbox Code Playgroud)